← Cloudflare Flagship / flagship / sdk
Python SDK
SDK для Python предоставляет совместимый с OpenFeature FlagshipServerProvider для серверных приложений на Python. Он оценивает флаги через HTTP и не поддерживает привязку Cloudflare Workers.
Установка
Установка с помощью uv или pip:
uv add cloudflare-flagshippip 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()