Skip to content

Commit eb5ce6b

Browse files
committed
feat: reverse the original hooks list and utilize FlagEvaluationContext
Signed-off-by: Tom Carrio <[email protected]>
1 parent 2f5c73c commit eb5ce6b

File tree

1 file changed

+14
-33
lines changed

1 file changed

+14
-33
lines changed

open_feature/open_feature_client.py

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,11 @@ def evaluate_flag_details(
233233
if evaluation_context is None:
234234
evaluation_context = EvaluationContext()
235235

236-
evaluation_hooks, hook_hints = self.__extract_evaluation_options(
237-
flag_evaluation_options
238-
)
236+
if flag_evaluation_options is None:
237+
flag_evaluation_options = FlagEvaluationOptions()
238+
239+
evaluation_hooks = flag_evaluation_options.hooks
240+
hook_hints = flag_evaluation_options.hook_hints
239241

240242
hook_context = HookContext(
241243
flag_key=flag_key,
@@ -254,9 +256,8 @@ def evaluate_flag_details(
254256
self.hooks + evaluation_hooks + self.provider.get_provider_hooks()
255257
)
256258
# after, error, finally: Provider, Invocation, Client, API
257-
reversed_merged_hooks = (
258-
self.provider.get_provider_hooks() + evaluation_hooks + self.hooks
259-
)
259+
reversed_merged_hooks = merged_hooks[:]
260+
reversed_merged_hooks.sort()
260261

261262
try:
262263
# https://github.com/open-feature/spec/blob/main/specification/sections/03-evaluation-context.md
@@ -290,22 +291,22 @@ def evaluate_flag_details(
290291

291292
return flag_evaluation
292293

293-
except OpenFeatureError as e:
294-
error_hooks(flag_type, hook_context, e, reversed_merged_hooks, hook_hints)
294+
except OpenFeatureError as err:
295+
error_hooks(flag_type, hook_context, err, reversed_merged_hooks, hook_hints)
295296

296297
return FlagEvaluationDetails(
297298
flag_key=flag_key,
298299
value=default_value,
299300
reason=Reason.ERROR,
300-
error_code=e.error_code,
301-
error_message=e.error_message,
301+
error_code=err.error_code,
302+
error_message=err.error_message,
302303
)
303304
# Catch any type of exception here since the user can provide any exception
304305
# in the error hooks
305-
except Exception as e: # noqa
306-
error_hooks(flag_type, hook_context, e, reversed_merged_hooks, hook_hints)
306+
except Exception as err: # noqa
307+
error_hooks(flag_type, hook_context, err, reversed_merged_hooks, hook_hints)
307308

308-
error_message = getattr(e, "error_message", str(e))
309+
error_message = getattr(err, "error_message", str(err))
309310
return FlagEvaluationDetails(
310311
flag_key=flag_key,
311312
value=default_value,
@@ -363,23 +364,3 @@ def _create_provider_evaluation(
363364

364365
return value
365366

366-
def __extract_evaluation_options(
367-
self, flag_evaluation_options: typing.Any
368-
) -> typing.Tuple[typing.List[Hook], MappingProxyType]:
369-
evaluation_hooks: typing.List[Hook] = []
370-
hook_hints: dict = {}
371-
372-
if flag_evaluation_options is dict:
373-
if (
374-
"hook_hints" in flag_evaluation_options
375-
and flag_evaluation_options["hook_hints"] is dict
376-
):
377-
hook_hints = dict(flag_evaluation_options["hook_hints"])
378-
379-
if (
380-
"hooks" in flag_evaluation_options
381-
and flag_evaluation_options["hooks"] is list
382-
):
383-
evaluation_hooks = flag_evaluation_options["hooks"]
384-
385-
return (evaluation_hooks, MappingProxyType(hook_hints))

0 commit comments

Comments
 (0)