Usage

Initialization

from UnleashClient import UnleashClient
client = UnleashClient("https://unleash.herokuapp.com/api", "My Program")
client.initialize_client()

To clean up gracefully:

client.destroy()

If the client is already initialized, calling initialize_client() again will raise a warning. This is not recommended client usage as it results in unnecessary calls to the Unleash server.

Checking if a feature is enabled

A check of a simple toggle:

client.is_enabled("my_toggle")

Supplying application context:

app_context = {"userId": "test@email.com"}
client.is_enabled("user_id_toggle", app_context)

You can specify a fallback function for cases where the client doesn’t recognize the toggle by using the fallback_function keyword argument:

def custom_fallback(feature_name: str, context: dict) -> bool:
    return True

client.is_enabled("my_toggle", fallback_function=custom_fallback)

Notes:

  • Must accept the fature name and context as an argument.

  • Client will evaluate the fallback function only if exception occurs when calling the is_enabled() method i.e. feature flag not found or other general exception.

You can also use the fallback_function argument to replace the obsolete default_value by using a lambda that ignores its inputs:

client.is_enabled("my_toggle", fallback_function=lambda feature_name, context: True)

Getting a variant

Checking for a variant:

context = {'userId': '2'}  # Context must have userId, sessionId, or remoteAddr.  If none are present, distribution will be random.

variant = client.get_variant("variant_toggle", context)

print(variant)

Returns:

{
   "name": "variant1",
   "payload": {
       "type": "string",
       "value": "val1"
       },
   "enabled": True
}

select_variant() supports the same arguments (i.e. fallback functions) as the is_enabled() method.

For more information about variants, see the Variable documentation.

Logging

Unleash Client uses the built-in logging facility to show information about errors, background jobs (feature-flag updates and metrics), et cetera.

It’s highly recommended that users implement

To see what’s going on when PoCing code, you can use the following:

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.INFO)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)

Using UnleashClient with Gitlab

Gitlab’s feature flags only supports the features URL. (API calls to the registration URL and metrics URL will fail with HTTP Error code 401.)

If using unleash-client-python with Gitlab’s feature flags, we recommend initializing the client with disable_metrics = True and disable_registration = True.

my_client = UnleashClient(
    url="https://gitlab.com/api/v4/feature_flags/someproject/someid",
    app_name="myClient1",
    instance_id="myinstanceid",
    disable_metrics=True,
    disable_registration=True
)