@@ -74,34 +74,78 @@ def _initialize_provider(self, provider: FeatureProvider) -> None:
7474 try :
7575 if hasattr (provider , "initialize" ):
7676 provider .initialize (self ._get_evaluation_context ())
77- self ._set_provider_status (provider , ProviderStatus .READY )
77+ self .dispatch_event (
78+ provider , ProviderEvent .PROVIDER_READY , ProviderEventDetails ()
79+ )
7880 except Exception as err :
7981 if (
8082 isinstance (err , OpenFeatureError )
8183 and err .error_code == ErrorCode .PROVIDER_FATAL
8284 ):
83- self ._set_provider_status (provider , ProviderStatus .FATAL )
85+ self .dispatch_event (
86+ provider ,
87+ ProviderEvent .PROVIDER_ERROR ,
88+ ProviderEventDetails (
89+ message = f"Provider initialization failed: { err } " ,
90+ error_code = ErrorCode .PROVIDER_FATAL ,
91+ ),
92+ )
8493 else :
85- self ._set_provider_status (provider , ProviderStatus .ERROR )
94+ self .dispatch_event (
95+ provider ,
96+ ProviderEvent .PROVIDER_ERROR ,
97+ ProviderEventDetails (
98+ message = f"Provider initialization failed: { err } " ,
99+ error_code = ErrorCode .GENERAL ,
100+ ),
101+ )
86102
87103 def _shutdown_provider (self , provider : FeatureProvider ) -> None :
88104 try :
89105 if hasattr (provider , "shutdown" ):
90106 provider .shutdown ()
91- self ._set_provider_status (provider , ProviderStatus .NOT_READY )
92- except Exception :
93- self ._set_provider_status (provider , ProviderStatus .FATAL )
107+ self .dispatch_event (
108+ provider , ProviderEvent .PROVIDER_READY , ProviderEventDetails ()
109+ )
110+ except Exception as err :
111+ self .dispatch_event (
112+ provider ,
113+ ProviderEvent .PROVIDER_ERROR ,
114+ ProviderEventDetails (
115+ message = f"Provider shutdown failed: { err } " ,
116+ error_code = ErrorCode .PROVIDER_FATAL ,
117+ ),
118+ )
94119
95120 def get_provider_status (self , provider : FeatureProvider ) -> ProviderStatus :
96121 return self ._provider_status .get (provider , ProviderStatus .NOT_READY )
97122
98- def _set_provider_status (
99- self , provider : FeatureProvider , status : ProviderStatus
123+ def dispatch_event (
124+ self ,
125+ provider : FeatureProvider ,
126+ event : ProviderEvent ,
127+ details : ProviderEventDetails ,
100128 ) -> None :
101- self ._provider_status [provider ] = status
102-
103- if event := ProviderEvent .from_provider_status (status ):
104- run_handlers_for_provider (provider , event , ProviderEventDetails ())
129+ self ._update_provider_status (provider , event , details )
130+ run_handlers_for_provider (provider , event , details )
131+
132+ def _update_provider_status (
133+ self ,
134+ provider : FeatureProvider ,
135+ event : ProviderEvent ,
136+ details : ProviderEventDetails ,
137+ ) -> None :
138+ if event == ProviderEvent .PROVIDER_READY :
139+ self ._provider_status [provider ] = ProviderStatus .READY
140+ elif event == ProviderEvent .PROVIDER_STALE :
141+ self ._provider_status [provider ] = ProviderStatus .STALE
142+ elif event == ProviderEvent .PROVIDER_ERROR :
143+ status = (
144+ ProviderStatus .FATAL
145+ if details .error_code == ErrorCode .PROVIDER_FATAL
146+ else ProviderStatus .ERROR
147+ )
148+ self ._provider_status [provider ] = status
105149
106150
107151default_registry = ProviderRegistry ()
0 commit comments