forked from open-feature/python-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.py
65 lines (43 loc) · 1.64 KB
/
api.py
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
import typing
from open_feature.client import OpenFeatureClient
from open_feature.evaluation_context import EvaluationContext
from open_feature.exception import GeneralError
from open_feature.hook import Hook
from open_feature.provider.metadata import Metadata
from open_feature.provider.no_op_provider import NoOpProvider
from open_feature.provider.provider import AbstractProvider
_provider: AbstractProvider = NoOpProvider()
_evaluation_context = EvaluationContext()
_hooks: typing.List[Hook] = []
def get_client(
name: typing.Optional[str] = None, version: typing.Optional[str] = None
) -> OpenFeatureClient:
return OpenFeatureClient(name=name, version=version, provider=_provider)
def set_provider(provider: AbstractProvider):
global _provider
if provider is None:
raise GeneralError(error_message="No provider")
_provider = provider
def get_provider() -> typing.Optional[AbstractProvider]:
global _provider
return _provider
def get_provider_metadata() -> typing.Optional[Metadata]:
global _provider
return _provider.get_metadata()
def get_evaluation_context() -> EvaluationContext:
global _evaluation_context
return _evaluation_context
def set_evaluation_context(evaluation_context: EvaluationContext):
global _evaluation_context
if evaluation_context is None:
raise GeneralError(error_message="No api level evaluation context")
_evaluation_context = evaluation_context
def add_hooks(hooks: typing.List[Hook]):
global _hooks
_hooks = _hooks + hooks
def clear_hooks():
global _hooks
_hooks = []
def get_hooks() -> typing.List[Hook]:
global _hooks
return _hooks