generated from coulomb/repo-seed
First implementation
This commit is contained in:
56
docs/sdk-examples/basic_usage.py
Normal file
56
docs/sdk-examples/basic_usage.py
Normal file
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
Basic usage example for feature-control-sdk.
|
||||
|
||||
This demonstrates the thin wrapper + local provider for development.
|
||||
|
||||
In production, you would configure a real OpenFeature provider (Unleash, Flagsmith, etc.)
|
||||
behind the scenes. The consuming repo only sees standard OpenFeature calls.
|
||||
|
||||
See:
|
||||
- specs/UseCaseCatalog.md (UC-A1, UC-A2)
|
||||
- docs/canon-mapping.md for context projection from canon models.
|
||||
"""
|
||||
|
||||
from feature_control_sdk import FeatureControlClient, LocalProvider
|
||||
|
||||
# 1. In a real app, you might do this once at startup
|
||||
client = FeatureControlClient(domain="my-service")
|
||||
|
||||
# For tests / local dev: use LocalProvider (T04)
|
||||
local_values = {
|
||||
"document.ocr.compute_heavy_path": False,
|
||||
"agent.invoice_classifier.extract_recipient": True,
|
||||
"tenant.preview.feature": "variant-a",
|
||||
}
|
||||
client.set_provider(LocalProvider(local_values))
|
||||
|
||||
# 2. Evaluation context (built from canon facts: actor, tenant, etc.)
|
||||
# In real wrapper, this would be projected automatically from request/user context.
|
||||
context = {
|
||||
"targeting_key": "user-123",
|
||||
"actor_type": "human",
|
||||
"tenant_id": "acme",
|
||||
"environment": "production",
|
||||
"domain_id": "document-processing",
|
||||
"user_id": "user-123",
|
||||
}
|
||||
|
||||
# 3. Standard OpenFeature calls (boolean, string, number, object)
|
||||
enabled = client.get_boolean_value(
|
||||
"document.ocr.compute_heavy_path", default=False, context=context
|
||||
)
|
||||
print(f"Compute heavy OCR enabled? {enabled}") # False (from local)
|
||||
|
||||
agent_cap = client.get_boolean_value(
|
||||
"agent.invoice_classifier.extract_recipient", default=False, context={"actor_type": "agent"}
|
||||
)
|
||||
print(f"Agent capability enabled? {agent_cap}") # True
|
||||
|
||||
variant = client.get_string_value("tenant.preview.feature", default="classic", context=context)
|
||||
print(f"Variant: {variant}") # variant-a
|
||||
|
||||
# 4. Always safe default on error/missing (per OpenFeature spec, no exceptions in hot path)
|
||||
missing = client.get_boolean_value("does.not.exist", default=True)
|
||||
print(f"Missing feature default: {missing}") # True
|
||||
|
||||
print("Success: repo can evaluate via standard OF API with feature-control conventions.")
|
||||
Reference in New Issue
Block a user