6
6
from openfeature .hook import Hook
7
7
from openfeature .provider import FeatureProvider
8
8
from openfeature .provider .metadata import Metadata
9
- from openfeature .provider .no_op_provider import NoOpProvider
10
-
11
- _provider : FeatureProvider = NoOpProvider ()
9
+ from openfeature .provider .registry import ProviderRegistry
12
10
13
11
_evaluation_context = EvaluationContext ()
14
12
15
13
_hooks : typing .List [Hook ] = []
16
14
17
- _providers : typing . Dict [ str , FeatureProvider ] = {}
15
+ _provider_registry : ProviderRegistry = ProviderRegistry ()
18
16
19
17
20
18
def get_client (
@@ -26,46 +24,18 @@ def get_client(
26
24
def set_provider (
27
25
provider : FeatureProvider , domain : typing .Optional [str ] = None
28
26
) -> None :
29
- if provider is None :
30
- raise GeneralError (error_message = "No provider" )
31
-
32
- if domain :
33
- _set_domain_provider (domain , provider )
34
- return
35
-
36
- global _provider
37
- if _provider :
38
- _provider .shutdown ()
39
- _provider = provider
40
- provider .initialize (_evaluation_context )
41
-
42
-
43
- def _set_domain_provider (domain : str , provider : FeatureProvider ) -> None :
44
- if domain in _providers :
45
- old_provider = _providers [domain ]
46
- del _providers [domain ]
47
- if old_provider not in _providers .values ():
48
- old_provider .shutdown ()
49
- if provider not in _providers .values ():
50
- provider .initialize (_evaluation_context )
51
- _providers [domain ] = provider
52
-
53
-
54
- def _get_provider (domain : typing .Optional [str ] = None ) -> FeatureProvider :
55
- global _provider
56
27
if domain is None :
57
- return _provider
58
- return _providers .get (domain , _provider )
28
+ _provider_registry .set_default_provider (provider )
29
+ else :
30
+ _provider_registry .set_provider (domain , provider )
59
31
60
32
61
33
def clear_providers () -> None :
62
- for provider in _providers .values ():
63
- provider .shutdown ()
64
- _providers .clear ()
34
+ return _provider_registry .clear_providers ()
65
35
66
36
67
37
def get_provider_metadata (domain : typing .Optional [str ] = None ) -> Metadata :
68
- return _get_provider (domain ).get_metadata ()
38
+ return _provider_registry . get_provider (domain ).get_metadata ()
69
39
70
40
71
41
def get_evaluation_context () -> EvaluationContext :
@@ -96,5 +66,4 @@ def get_hooks() -> typing.List[Hook]:
96
66
97
67
98
68
def shutdown () -> None :
99
- for provider in {_provider , * _providers .values ()}:
100
- provider .shutdown ()
69
+ _provider_registry .shutdown ()
0 commit comments