Skip to content

Commit da62cd2

Browse files
committed
fix: implementation, update schema
Signed-off-by: Konvalinka <[email protected]>
1 parent 990fa80 commit da62cd2

File tree

2 files changed

+24
-15
lines changed
  • providers/openfeature-provider-flagd

2 files changed

+24
-15
lines changed

providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/process/connector/grpc_watcher.py

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import grpc
88
from google.protobuf.json_format import MessageToDict
9-
from google.protobuf.struct_pb2 import Struct
109

1110
from openfeature.evaluation_context import EvaluationContext
1211
from 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

Comments
 (0)