66
77import grpc
88from google .protobuf .json_format import MessageToDict
9- from google .protobuf .struct_pb2 import Struct
109
1110from openfeature .evaluation_context import EvaluationContext
1211from openfeature .event import ProviderEventDetails
@@ -210,6 +209,17 @@ def _create_request_args(self) -> dict:
210209
211210 return request_args
212211
212+ def _fetch_metadata (self ) -> typing .Optional [sync_pb2 .GetMetadataResponse ]:
213+ if self .config .sync_metadata_disabled :
214+ return None
215+
216+ context_values_request = sync_pb2 .GetMetadataRequest ()
217+ try :
218+ return self .stub .GetMetadata (context_values_request , wait_for_ready = True )
219+ except grpc .RpcError as e :
220+ logger .debug (f"Error getting sync metadata: { e } " )
221+ return None
222+
213223 def listen (self ) -> None :
214224 call_args = (
215225 {"timeout" : self .streamline_deadline_seconds }
@@ -220,18 +230,9 @@ def listen(self) -> None:
220230
221231 while self .active :
222232 try :
223- context_values_response : sync_pb2 .GetMetadataResponse
224- if self .config .sync_metadata_disabled :
225- context_values_response = sync_pb2 .GetMetadataResponse (
226- metadata = Struct ()
227- )
228- else :
229- context_values_request = sync_pb2 .GetMetadataRequest ()
230- context_values_response = self .stub .GetMetadata (
231- context_values_request , wait_for_ready = True
232- )
233-
234- context_values = MessageToDict (context_values_response )
233+ context_values_response : typing .Optional [
234+ sync_pb2 .GetMetadataResponse
235+ ] = self ._fetch_metadata ()
235236
236237 request = sync_pb2 .SyncFlagsRequest (** request_args )
237238
@@ -245,12 +246,20 @@ def listen(self) -> None:
245246 )
246247 self .flag_store .update (json .loads (flag_str ))
247248
249+ context_values = None
250+ if flag_rsp .sync_context :
251+ context_values = MessageToDict (flag_rsp .sync_context )
252+ elif context_values_response :
253+ context_values = MessageToDict (context_values_response )[
254+ "metadata"
255+ ]
256+
248257 if not self .connected :
249258 self .emit_provider_ready (
250259 ProviderEventDetails (
251260 message = "gRPC sync connection established"
252261 ),
253- context_values [ "metadata" ] ,
262+ context_values ,
254263 )
255264 self .connected = True
256265
0 commit comments