INTEGRITY Документация

Python SDK

SDK для Python предоставляет совместимый с OpenFeature FlagshipServerProvider для серверных приложений на Python. Он оценивает флаги через HTTP и не поддерживает привязку Cloudflare Workers.

Установка

Установка с помощью uv или pip:

uv add cloudflare-flagship
pip install cloudflare-flagship

Настройка

Настройте провайдер, указав идентификатор приложения Flagship, идентификатор аккаунта Cloudflare и API-токен с разрешением Flagship Evaluate или Flagship App Evaluate.

from openfeature import api
from openfeature.evaluation_context import EvaluationContext
from flagship import FlagshipServerProvider

api.set_provider(
    FlagshipServerProvider(
        app_id="<APP_ID>",
        account_id="<ACCOUNT_ID>",
        auth_token="<API_TOKEN>",
    )
)

client = api.get_client()
enabled = client.get_boolean_value(
    "new-checkout",
    False,
    EvaluationContext(targeting_key="user-42", attributes={"plan": "enterprise"}),
)

Типы флагов

SDK для Python поддерживает все типы флагов OpenFeature. SDK OpenFeature для Python разделяет числовые значения на методы для integer и float.

enabled = client.get_boolean_value("new-checkout", False, context)
variant = client.get_string_value("homepage-hero", "control", context)
limit = client.get_integer_value("upload-limit", 10, context)
rate = client.get_float_value("sample-rate", 0.1, context)
config = client.get_object_value("ui-config", {"theme": "light"}, context)

Используйте *_details методы, если вам нужны итоговое значение, причина, вариант или код ошибки.

Параметры настройки

Опция Тип По умолчанию Описание
app_id str None ID приложения Flagship.
account_id str None Обязательно вместе с app_id.
auth_token str None Bearer-токен, добавляемый к каждому запросу.
headers_factory Callable[[], dict[str, str]] None Динамические заголовки для каждого запроса.
timeout float 5.0 Тайм-аут запроса в секундах.
retries int 1 Попытки повтора при временных ошибках, не более 10.
retry_delay float 1.0 Задержка между повторными попытками в секундах, не более 30.0.
logging bool False Включите отладочный вывод на уровне SDK через логгер SDK.
cache_ttl float None TTL кэша в секундах. Включает кэширование, если значение задано.
cache_max_size int 1000 Максимальное количество записей в кеше до вытеснения по алгоритму LRU (наименее недавно использованных).

Кеширование ответов

Кэширование ответов на стороне сервера по умолчанию отключено. Включите его с помощью cache_ttl когда вы хотите, чтобы повторные оценки одного и того же флага, типа и контекста оценки использовали недавний результат повторно.

FlagshipServerProvider(
    app_id="<APP_ID>",
    account_id="<ACCOUNT_ID>",
    auth_token="<API_TOKEN>",
    cache_ttl=30.0,
    cache_max_size=1000,
)

Кэшированные значения могут устареть до истечения TTL. Используйте короткий TTL для флагов, которые могут изменяться во время активных развёртываний. Провайдер не кэширует отключённые флаги и ошибки.

Контекст оценки

Атрибуты контекста передаются как параметры запроса URL. Поддерживаются строки, целые числа, числа с плавающей запятой, булевы значения и datetime значения. Dictionaries, lists, tuples и другие сложные значения вызывают InvalidContextError.

Асинхронная оценка

Асинхронный API повторяет синхронный API:

enabled = await client.get_boolean_value_async("new-checkout", False, context)
details = await client.get_boolean_details_async("new-checkout", False, context)

При завершении работы в асинхронном контексте используйте shutdown_async():

await api.shutdown_async()