Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chore standardize readme #129

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 110 additions & 28 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,14 @@ We support multiple data types for flags (numbers, strings, booleans, objects) a

This library is intended to be used in server-side contexts and has not been evaluated for use in mobile devices.

## Usage

While Boolean provides the simplest introduction, we offer a variety of flag types.

```python
# Depending on the flag type, use one of the methods below
flag_key = "PROVIDER_FLAG"
boolean_result = open_feature_client.get_boolean_value(key=flag_key,default_value=False)
integer_result = open_feature_client.get_integer_value(key=flag_key,default_value=-1)
float_result = open_feature_client.get_float_value(key=flag_key,default_value=-1)
string_result = open_feature_client.get_string_value(key=flag_key,default_value="")
object_result = open_feature_client.get_object_value(key=flag_key,default_value={})
```

Each provider class may have further setup required i.e. secret keys, environment variables etc

## Requirements
## 🔍 Requirements:

- Python 3.8+

## Installation

## 📦 Installation:
### Add it to your build

<!---x-release-please-start-version-->

Pip install

```bash
Expand All @@ -59,6 +41,17 @@ pip install requirements.txt

<!---x-release-please-end-->



## 🌟 Features:
- support for various backend [providers](https://openfeature.dev/docs/reference/concepts/provider)
- easy integration and extension via [hooks](https://openfeature.dev/docs/reference/concepts/hooks)
- bool, string, numeric, and object flag types
- [context-aware](https://openfeature.dev/docs/reference/concepts/evaluation-context) evaluation


## 🚀 Usage:

### Configure it

In order to use the sdk there is some minor configuration. Follow the script below:
Expand All @@ -71,22 +64,111 @@ open_feature_api.set_provider(NoOpProvider())
open_feature_client = open_feature_api.get_client()
```

## Contacting us
### Basics:

We hold regular meetings which you can see [here](https://github.com/open-feature/community/#meetings-and-events).
While Boolean provides the simplest introduction, we offer a variety of flag types.

We are also present on the `#openfeature` channel in the [CNCF slack](https://slack.cncf.io/).
```python
# Depending on the flag type, use one of the methods below
flag_key = "PROVIDER_FLAG"
boolean_result = open_feature_client.get_boolean_value(key=flag_key,default_value=False)
integer_result = open_feature_client.get_integer_value(key=flag_key,default_value=-1)
float_result = open_feature_client.get_float_value(key=flag_key,default_value=-1)
string_result = open_feature_client.get_string_value(key=flag_key,default_value="")
object_result = open_feature_client.get_object_value(key=flag_key,default_value={})
```

You can also bind a provider to a specific client by name instead of setting that provider globally:

```python

open_feature_api.set_provider(NoOpProvider())
```

Each provider class may have further setup required i.e. secret keys, environment variables etc

<!-- TODO: example of named client binding -->
### Context-aware evaluation:

Sometimes the value of a flag must take into account some dynamic criteria about the application or user, such as the user location, IP, email address, or the location of the server.
In OpenFeature, we refer to this as [`targeting`](https://openfeature.dev/specification/glossary#targeting).
If the flag system you're using supports targeting, you can provide the input data using the `EvaluationContext`.

```python
from open_feature.open_feature_api import get_client, get_provider, set_provider
from open_feature.open_feature_evaluation_context import (
api_evaluation_context,
set_api_evaluation_context,
)

global_context = EvaluationContext(
targeting_key="targeting_key1", attributes={"application": "value1"}
)
request_context = EvaluationContext(
targeting_key="targeting_key2", attributes={"email": request.form['email']}
)

## set global context
set_api_evaluation_context(first_context)

# merge second context
client = get_client(name="No-op Provider", version="0.5.2")
client.get_string_value("email", None, request_context)

```
### Events

Events allow you to react to state changes in the provider or underlying flag management system, such as flag definition changes, provider readiness, or error conditions.

<!-- TODO: code example of a PROVIDER_CONFIGURATION_CHANGED event -->

## Contributors
### Providers:

Thanks so much to our contributors.
To develop a provider, you need to create a new project and include the OpenFeature SDK as a dependency. This can be a new repository or included in [the existing contrib repository](https://github.com/open-feature/python-sdk-contrib) available under the OpenFeature organization. Finally, you’ll then need to write the provider itself. This can be accomplished by implementing the `Provider` interface exported by the OpenFeature SDK.

<!-- TODO: code example implementing a provider -->

<!-- TODO: update with the technology in question -->
See [here](https://openfeature.dev/ecosystem) for a catalog of available providers.

### Hooks:
TBD

<!-- A hook is a mechanism that allows for adding arbitrary behavior at well-defined points of the flag evaluation life-cycle. Use cases include validating the resolved flag value, modifying or adding data to the evaluation context, logging, telemetry, and tracking. -->

<!-- TODO: code example of a hook -->

<!-- TODO: update with the technology in question -->
See [here](https://openfeature.dev/ecosystem) for a catalog of available hooks.

### Logging:
TBD

<!-- TODO: talk about logging config -->

## ⭐️ Support the project
- Give this repo a ⭐️!
- Follow us on social media:
- Twitter: [@openfeature](https://twitter.com/openfeature)
- LinkedIn: [OpenFeature](https://www.linkedin.com/company/openfeature/)
- Join us on [Slack](https://cloud-native.slack.com/archives/C0344AANLA1)
- For more check out our [community page](https://openfeature.dev/community/)

## 🤝 Contributing

Interested in contributing? Great, we'd love your help! To get started, take a look at the [CONTRIBUTING](CONTRIBUTING.md) guide.

### Thanks to everyone that has already contributed

<!-- TODO: update with correct repo -->
<a href="https://github.com/open-feature/python-sdk/graphs/contributors">
<img src="https://contrib.rocks/image?repo=open-feature/python-sdk" />
<img src="https://contrib.rocks/image?repo=open-feature/python-sdk" alt="Pictures of the folks who have contributed to the project" />
</a>

Made with [contrib.rocks](https://contrib.rocks).

### Development
## Contacting us

We hold regular meetings which you can see [here](https://github.com/open-feature/community/#meetings-and-events).

If you would like to contribute to the project, please see our [contributing](./CONTRIBUTING.md) documentation!
We are also present on the `#openfeature` channel in the [CNCF slack](https://slack.cncf.io/).
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ tomli==2.0.1
# pep517
# pylint
# pytest
typing-extensions==4.6.0
typing-extensions==4.6.3
# via
# astroid
# black
Expand Down