6
6
7
7
import grpc
8
8
from google .protobuf .json_format import MessageToDict
9
+ from grpc import StatusCode
9
10
10
11
from openfeature .evaluation_context import EvaluationContext
11
12
from openfeature .event import ProviderEventDetails
@@ -209,20 +210,22 @@ def _create_request_args(self) -> dict:
209
210
210
211
return request_args
211
212
212
- def _fetch_metadata (self ) -> typing . Optional [ sync_pb2 . GetMetadataResponse ] :
213
+ def _fetch_metadata (self ) -> dict :
213
214
if self .config .sync_metadata_disabled :
214
- return None
215
+ return {}
215
216
216
217
context_values_request = sync_pb2 .GetMetadataRequest ()
217
- context_values_response : sync_pb2 .GetMetadataResponse
218
218
try :
219
219
context_values_response = self .stub .GetMetadata (
220
220
context_values_request , wait_for_ready = True
221
221
)
222
- return context_values_response
222
+ return MessageToDict ( context_values_response )
223
223
except grpc .RpcError as e :
224
- logger .debug (f"Error getting sync metadata: { e } " )
225
- return None
224
+ if e .code () == StatusCode .UNIMPLEMENTED :
225
+ logger .debug ("Metadata endpoint disabled" )
226
+ return {}
227
+ else :
228
+ raise e
226
229
227
230
def listen (self ) -> None :
228
231
call_args = (
@@ -234,7 +237,7 @@ def listen(self) -> None:
234
237
235
238
while self .active :
236
239
try :
237
- context_values_response = self ._fetch_metadata ()
240
+ context_values = self ._fetch_metadata ()[ "metadata" ]
238
241
239
242
request = sync_pb2 .SyncFlagsRequest (** request_args )
240
243
@@ -248,13 +251,8 @@ def listen(self) -> None:
248
251
)
249
252
self .flag_store .update (json .loads (flag_str ))
250
253
251
- context_values = {}
252
254
if flag_rsp .sync_context :
253
255
context_values = MessageToDict (flag_rsp .sync_context )
254
- elif context_values_response :
255
- context_values = MessageToDict (context_values_response )[
256
- "metadata"
257
- ]
258
256
259
257
if not self .connected :
260
258
self .emit_provider_ready (
0 commit comments