Skip to content

Commit 78ea3b9

Browse files
authored
feat: populate provider and client metadata in HookContext (#302)
* feat: populate provider and client metadata in HookContext Signed-off-by: Federico Bond <federicobond@gmail.com> * fix: ensure provider consistency during flag evaluation Signed-off-by: Federico Bond <federicobond@gmail.com> --------- Signed-off-by: Federico Bond <federicobond@gmail.com>
1 parent 4a323b0 commit 78ea3b9

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

openfeature/client.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ def evaluate_flag_details( # noqa: PLR0915
264264
if flag_evaluation_options is None:
265265
flag_evaluation_options = FlagEvaluationOptions()
266266

267+
provider = self.provider # call this once to maintain a consistent reference
267268
evaluation_hooks = flag_evaluation_options.hooks
268269
hook_hints = flag_evaluation_options.hook_hints
269270

@@ -272,8 +273,8 @@ def evaluate_flag_details( # noqa: PLR0915
272273
flag_type=flag_type,
273274
default_value=default_value,
274275
evaluation_context=evaluation_context,
275-
client_metadata=None,
276-
provider_metadata=None,
276+
client_metadata=self.get_metadata(),
277+
provider_metadata=provider.get_metadata(),
277278
)
278279
# Hooks need to be handled in different orders at different stages
279280
# in the flag evaluation
@@ -282,7 +283,7 @@ def evaluate_flag_details( # noqa: PLR0915
282283
api.get_hooks()
283284
+ self.hooks
284285
+ evaluation_hooks
285-
+ self.provider.get_provider_hooks()
286+
+ provider.get_provider_hooks()
286287
)
287288
# after, error, finally: Provider, Invocation, Client, API
288289
reversed_merged_hooks = merged_hooks[:]
@@ -336,6 +337,7 @@ def evaluate_flag_details( # noqa: PLR0915
336337
)
337338

338339
flag_evaluation = self._create_provider_evaluation(
340+
provider,
339341
flag_type,
340342
flag_key,
341343
default_value,
@@ -391,6 +393,7 @@ def evaluate_flag_details( # noqa: PLR0915
391393

392394
def _create_provider_evaluation(
393395
self,
396+
provider: FeatureProvider,
394397
flag_type: FlagType,
395398
flag_key: str,
396399
default_value: typing.Any,
@@ -413,11 +416,11 @@ def _create_provider_evaluation(
413416
)
414417

415418
get_details_callables: typing.Mapping[FlagType, GetDetailCallable] = {
416-
FlagType.BOOLEAN: self.provider.resolve_boolean_details,
417-
FlagType.INTEGER: self.provider.resolve_integer_details,
418-
FlagType.FLOAT: self.provider.resolve_float_details,
419-
FlagType.OBJECT: self.provider.resolve_object_details,
420-
FlagType.STRING: self.provider.resolve_string_details,
419+
FlagType.BOOLEAN: provider.resolve_boolean_details,
420+
FlagType.INTEGER: provider.resolve_integer_details,
421+
FlagType.FLOAT: provider.resolve_float_details,
422+
FlagType.OBJECT: provider.resolve_object_details,
423+
FlagType.STRING: provider.resolve_string_details,
421424
}
422425

423426
get_details_callable = get_details_callables.get(flag_type)

0 commit comments

Comments
 (0)