Logo

dev-resources.site

for different kinds of informations.

Python Feature Flags with a Flat JSON File

Published at
11/5/2024
Categories
openfeature
flagd
json
featureflag
Author
Adam Gardner
Python Feature Flags with a Flat JSON File

A while ago I posted on how to add feature flags to a nodeJS application using only a flat file + OpenFeature.

Here's how to do the same thing for Python!

Install Packages

pip install openfeature-provider-flagd

Create flags.json

Define the feature flag (in this case a single flag called background-colour and save as flags.json:

{
    "$schema": "https://flagd.dev/schema/v0/flags.json",
    "flags": {
      "background-colour": {
        "state": "ENABLED",
        "variants": {
          "white": "#D6D4D2",
          "green": "#73A53E",
          "orange": "#FF7C00",
          "lime": "#D3D309",
          "blue": "#4AB9D9"
        },
        "defaultVariant": "green"
     }
    }
}

The Code

Save this as app.py:

from openfeature import api
from openfeature.contrib.provider.flagd import FlagdProvider
from openfeature.contrib.provider.flagd.config import ResolverType
import time

api.set_provider(FlagdProvider(
    resolver_type=ResolverType.IN_PROCESS,
    offline_flag_source_path="flags.json",
))

client = api.get_client("my-app")

while True:

    try:
        colour = client.get_string_value(flag_key="background-colour", default_value="NA")
        print(f"The current colour is: {colour}")
    finally:
        time.sleep(1)

Run Program

Go ahead and start the program: python app.py

This should print the Hex colour value once per second:

The current colour is: #73A53E
The current colour is: #73A53E
The current colour is: #73A53E

Leave the program running and change the defaultVariant in flags.json from "green" to "lime" (remember to save the changes) and the program should automatically refresh:

The current colour is: #73A53E
The current colour is: #73A53E
The current colour is: #D3D309
The current colour is: #D3D309
The current colour is: #D3D309

Summary

This method uses the in process evaluation of the open source feature flag system flagd + OpenFeature to build a feature flagging ability in Python.

Find out more about the in process evaluation engine for flagd and OpenFeature here.

Featured ones: