Feature flag SDK for Mitra Python services
Project description
Mitra Feature Flags SDK Python
SDK assíncrono para carregar feature flags em serviços Python da Mitra e avaliá-las localmente. O SDK mantém um snapshot imutável em memória, preserva o último valor válido em falhas e usa o fallback declarado no código quando uma flag não existe.
Instalação
pip install mitra-feature-flags-sdk-python
Uso
from mitra_feature_flags import (
BooleanFlag,
FeatureFlagsClient,
FeatureFlagsConfig,
StringListFlag,
)
EMBEDDED_IDE = BooleanFlag("EMBEDDED_IDE", False)
TENANTS_IN_ROLLOUT = StringListFlag("TENANTS_IN_ROLLOUT")
feature_flags = FeatureFlagsClient(
FeatureFlagsConfig(
service_name="mitra-sandbox",
environment="DEV",
internal_secret=settings.internal_secret,
)
)
feature_flags.start()
if feature_flags.is_enabled(EMBEDDED_IDE):
...
if feature_flags.contains(TENANTS_IN_ROLLOUT, tenant_id):
...
await feature_flags.close()
start() é síncrono: agenda o refresh em segundo plano e retorna sem bloquear o startup. is_enabled(), get_string_list() e contains() leem somente memória e nunca fazem I/O.
Configuração
| Campo | Obrigatório | Default | Descrição |
|---|---|---|---|
service_name |
sim | sem default | Nome do serviço em lower kebab case, com até 100 caracteres. |
environment |
sim | sem default | Ambiente da flag, normalizado para upper snake case, com até 100 caracteres. |
internal_secret |
sim | sem default | Segredo usado no header interno. Nunca aparece no repr da configuração. |
base_url |
não | http://mitra-feature-flags.mitra.local:8080 |
URL do control plane. |
refresh_interval_seconds |
não | 60.0 |
Intervalo base entre atualizações. |
refresh_jitter_seconds |
não | 10.0 |
Variação aleatória adicional. Aceita zero. |
connect_timeout_seconds |
não | 0.2 |
Timeout para abrir a conexão HTTP. |
read_timeout_seconds |
não | 0.5 |
Timeout para receber a resposta HTTP. |
Lifecycle com FastAPI
O SDK não depende de FastAPI, mas encaixa no lifecycle nativo da aplicação:
from contextlib import asynccontextmanager
from fastapi import FastAPI
@asynccontextmanager
async def lifespan(_app: FastAPI):
feature_flags.start()
yield
await feature_flags.close()
app = FastAPI(lifespan=lifespan)
Contrato
- Nomes de flags usam
UPPER_SNAKE_CASEe têm até 100 caracteres. - Valores aceitos são boolean ou lista de strings.
- O snapshot é filtrado pelo
service_nameeenvironmentenviados ao control plane. X-Internal-Secretnunca é logado.ETagevita baixar snapshots sem alteração.- Payload inválido ou serviço indisponível preserva o último snapshot válido.
Desenvolvimento
ruff check .
mypy
pytest
python -m build
python -m twine check dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mitra_feature_flags_sdk_python-1.0.0.tar.gz.
File metadata
- Download URL: mitra_feature_flags_sdk_python-1.0.0.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a1e18c0a1f8c6fd61aa3821852bf58c70fb29114dccd9f6346d6b9f7513fd1b
|
|
| MD5 |
d20e84f063b470ec61a46caf004c7134
|
|
| BLAKE2b-256 |
b9c0d8219793c3bcdda78bcacec7ab500479466bd7b8a008c014c0619009dc93
|
Provenance
The following attestation bundles were made for mitra_feature_flags_sdk_python-1.0.0.tar.gz:
Publisher:
release.yml on mitralab-dev/mitra-feature-flags-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mitra_feature_flags_sdk_python-1.0.0.tar.gz -
Subject digest:
1a1e18c0a1f8c6fd61aa3821852bf58c70fb29114dccd9f6346d6b9f7513fd1b - Sigstore transparency entry: 2189776401
- Sigstore integration time:
-
Permalink:
mitralab-dev/mitra-feature-flags-sdk-python@271f35609e0fd0f8cfbd0d1af577ecacbf06dcff -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mitralab-dev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@271f35609e0fd0f8cfbd0d1af577ecacbf06dcff -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mitra_feature_flags_sdk_python-1.0.0-py3-none-any.whl.
File metadata
- Download URL: mitra_feature_flags_sdk_python-1.0.0-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
665d503bd4f78fbc3ee235568adecfcf3d465e9cb93714be0ef1e79523b93007
|
|
| MD5 |
43503dd94573511e3bb62a7a2dc3d097
|
|
| BLAKE2b-256 |
c4a4a23bcb050ab80dda3e87cedf4d157bdca80b510ef7c60876a81bd71d1383
|
Provenance
The following attestation bundles were made for mitra_feature_flags_sdk_python-1.0.0-py3-none-any.whl:
Publisher:
release.yml on mitralab-dev/mitra-feature-flags-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mitra_feature_flags_sdk_python-1.0.0-py3-none-any.whl -
Subject digest:
665d503bd4f78fbc3ee235568adecfcf3d465e9cb93714be0ef1e79523b93007 - Sigstore transparency entry: 2189776410
- Sigstore integration time:
-
Permalink:
mitralab-dev/mitra-feature-flags-sdk-python@271f35609e0fd0f8cfbd0d1af577ecacbf06dcff -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mitralab-dev
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@271f35609e0fd0f8cfbd0d1af577ecacbf06dcff -
Trigger Event:
workflow_dispatch
-
Statement type: