""" 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.")