Skip to content

Commit

Permalink
feat: populate provider and client metadata in HookContext (#302)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
federicobond authored Mar 25, 2024
1 parent 4a323b0 commit 78ea3b9
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions openfeature/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ def evaluate_flag_details( # noqa: PLR0915
if flag_evaluation_options is None:
flag_evaluation_options = FlagEvaluationOptions()

provider = self.provider # call this once to maintain a consistent reference
evaluation_hooks = flag_evaluation_options.hooks
hook_hints = flag_evaluation_options.hook_hints

Expand All @@ -272,8 +273,8 @@ def evaluate_flag_details( # noqa: PLR0915
flag_type=flag_type,
default_value=default_value,
evaluation_context=evaluation_context,
client_metadata=None,
provider_metadata=None,
client_metadata=self.get_metadata(),
provider_metadata=provider.get_metadata(),
)
# Hooks need to be handled in different orders at different stages
# in the flag evaluation
Expand All @@ -282,7 +283,7 @@ def evaluate_flag_details( # noqa: PLR0915
api.get_hooks()
+ self.hooks
+ evaluation_hooks
+ self.provider.get_provider_hooks()
+ provider.get_provider_hooks()
)
# after, error, finally: Provider, Invocation, Client, API
reversed_merged_hooks = merged_hooks[:]
Expand Down Expand Up @@ -336,6 +337,7 @@ def evaluate_flag_details( # noqa: PLR0915
)

flag_evaluation = self._create_provider_evaluation(
provider,
flag_type,
flag_key,
default_value,
Expand Down Expand Up @@ -391,6 +393,7 @@ def evaluate_flag_details( # noqa: PLR0915

def _create_provider_evaluation(
self,
provider: FeatureProvider,
flag_type: FlagType,
flag_key: str,
default_value: typing.Any,
Expand All @@ -413,11 +416,11 @@ def _create_provider_evaluation(
)

get_details_callables: typing.Mapping[FlagType, GetDetailCallable] = {
FlagType.BOOLEAN: self.provider.resolve_boolean_details,
FlagType.INTEGER: self.provider.resolve_integer_details,
FlagType.FLOAT: self.provider.resolve_float_details,
FlagType.OBJECT: self.provider.resolve_object_details,
FlagType.STRING: self.provider.resolve_string_details,
FlagType.BOOLEAN: provider.resolve_boolean_details,
FlagType.INTEGER: provider.resolve_integer_details,
FlagType.FLOAT: provider.resolve_float_details,
FlagType.OBJECT: provider.resolve_object_details,
FlagType.STRING: provider.resolve_string_details,
}

get_details_callable = get_details_callables.get(flag_type)
Expand Down

0 comments on commit 78ea3b9

Please sign in to comment.