Skip to content

Commit cf0d6eb

Browse files
committed
refactor(registry): parameterize ProviderRegistry with EventSupport and context getter
1 parent 5520fa7 commit cf0d6eb

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

openfeature/provider/_registry.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from openfeature._event_support import run_handlers_for_provider
1+
from __future__ import annotations
2+
3+
import typing
4+
from collections.abc import Callable
5+
26
from openfeature.evaluation_context import EvaluationContext, get_evaluation_context
37
from openfeature.event import (
48
ProviderEvent,
@@ -8,18 +12,29 @@
812
from openfeature.provider import FeatureProvider, ProviderStatus
913
from openfeature.provider.no_op_provider import NoOpProvider
1014

15+
if typing.TYPE_CHECKING:
16+
from openfeature._event_support import EventSupport
17+
1118

1219
class ProviderRegistry:
1320
_default_provider: FeatureProvider
1421
_providers: dict[str, FeatureProvider]
1522
_provider_status: dict[FeatureProvider, ProviderStatus]
1623

17-
def __init__(self) -> None:
24+
def __init__(
25+
self,
26+
event_support: EventSupport | None = None,
27+
evaluation_context_getter: Callable[[], EvaluationContext] | None = None,
28+
) -> None:
1829
self._default_provider = NoOpProvider()
1930
self._providers = {}
2031
self._provider_status = {
2132
self._default_provider: ProviderStatus.READY,
2233
}
34+
self._event_support = event_support
35+
self._evaluation_context_getter = (
36+
evaluation_context_getter or get_evaluation_context
37+
)
2338

2439
def set_provider(self, domain: str, provider: FeatureProvider) -> None:
2540
if provider is None:
@@ -73,7 +88,7 @@ def shutdown(self) -> None:
7388
self._shutdown_provider(provider)
7489

7590
def _get_evaluation_context(self) -> EvaluationContext:
76-
return get_evaluation_context()
91+
return self._evaluation_context_getter()
7792

7893
def _initialize_provider(self, provider: FeatureProvider) -> None:
7994
provider.attach(self.dispatch_event)
@@ -124,7 +139,8 @@ def dispatch_event(
124139
details: ProviderEventDetails,
125140
) -> None:
126141
self._update_provider_status(provider, event, details)
127-
run_handlers_for_provider(provider, event, details)
142+
if self._event_support is not None:
143+
self._event_support.run_handlers_for_provider(provider, event, details)
128144

129145
def _update_provider_status(
130146
self,

0 commit comments

Comments
 (0)