-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathapi.py
More file actions
96 lines (76 loc) · 2.95 KB
/
api.py
File metadata and controls
96 lines (76 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from openfeature import _event_support
from openfeature.client import OpenFeatureClient
from openfeature.evaluation_context import (
get_evaluation_context,
set_evaluation_context,
)
from openfeature.event import (
EventHandler,
ProviderEvent,
)
from openfeature.hook import add_hooks, clear_hooks, get_hooks
from openfeature.provider import FeatureProvider
from openfeature.provider._registry import provider_registry
from openfeature.provider.metadata import Metadata
from openfeature.transaction_context import (
get_transaction_context,
set_transaction_context,
set_transaction_context_propagator,
)
__all__ = [
"add_handler",
"add_hooks",
"clear_hooks",
"clear_providers",
"get_client",
"get_evaluation_context",
"get_hooks",
"get_provider_metadata",
"get_transaction_context",
"remove_handler",
"set_evaluation_context",
"set_provider",
"set_provider_and_wait",
"set_transaction_context",
"set_transaction_context_propagator",
"shutdown",
]
def get_client(
domain: str | None = None, version: str | None = None
) -> OpenFeatureClient:
return OpenFeatureClient(domain=domain, version=version)
def set_provider(provider: FeatureProvider, domain: str | None = None) -> None:
"""Set the provider, calling initialize() synchronously.
Note: In a future major version, this function should run initialize()
in a background thread to match the non-blocking semantics of
set_provider() in the Java, Go, and Node.js SDKs. Callers who need
blocking behavior should migrate to set_provider_and_wait().
"""
if domain is None:
provider_registry.set_default_provider(provider)
else:
provider_registry.set_provider(domain, provider)
def set_provider_and_wait(provider: FeatureProvider, domain: str | None = None) -> None:
"""Set the provider and wait for initialization to complete.
Blocks the calling thread until the provider's initialize() method
returns successfully or raises an exception. If initialization fails,
the exception is re-raised to the caller.
Spec reference: Requirement 1.1.2.4 - "The API SHOULD provide functions
to set a provider and wait for the initialize function to return or
abnormally terminate."
"""
if domain is None:
provider_registry.set_default_provider_and_wait(provider)
else:
provider_registry.set_provider_and_wait(domain, provider)
def clear_providers() -> None:
provider_registry.clear_providers()
_event_support.clear()
def get_provider_metadata(domain: str | None = None) -> Metadata:
return provider_registry.get_provider(domain).get_metadata()
def shutdown() -> None:
provider_registry.shutdown()
def add_handler(event: ProviderEvent, handler: EventHandler) -> None:
_event_support.add_global_handler(event, handler)
def remove_handler(event: ProviderEvent, handler: EventHandler) -> None:
_event_support.remove_global_handler(event, handler)