From 6f718426fba2c6defa0c724bf5125976e52c11f3 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 28 Jan 2025 10:59:47 +0100 Subject: [PATCH] fixup! Add evaluation details to finally hook stage #403 Signed-off-by: christian.lutnik --- openfeature/client.py | 2 +- openfeature/hook/__init__.py | 2 +- tests/features/steps/hooks_steps.py | 28 ++++++++++++++-------------- tests/hook/test_hook_support.py | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/openfeature/client.py b/openfeature/client.py index 1d1bc547..9430bddd 100644 --- a/openfeature/client.py +++ b/openfeature/client.py @@ -398,7 +398,7 @@ def evaluate_flag_details( # noqa: PLR0915 hook_context, flag_evaluation, reversed_merged_hooks, - hook_hints + hook_hints, ) def _create_provider_evaluation( diff --git a/openfeature/hook/__init__.py b/openfeature/hook/__init__.py index b765e64d..03d8c865 100644 --- a/openfeature/hook/__init__.py +++ b/openfeature/hook/__init__.py @@ -113,7 +113,7 @@ def finally_after( self, hook_context: HookContext, details: FlagEvaluationDetails[typing.Any], - hints: HookHints + hints: HookHints, ) -> None: """ Run after flag evaluation, including any error processing. diff --git a/tests/features/steps/hooks_steps.py b/tests/features/steps/hooks_steps.py index 5cf34d5a..e527a5a2 100644 --- a/tests/features/steps/hooks_steps.py +++ b/tests/features/steps/hooks_steps.py @@ -6,7 +6,7 @@ from openfeature.hook import Hook -@when('a hook is added to the client') +@when("a hook is added to the client") def step_impl_add_hook(context): hook = MagicMock(spec=Hook) hook.before = MagicMock() @@ -17,14 +17,14 @@ def step_impl_add_hook(context): context.client.add_hooks([hook]) -@then('error hooks should be called') +@then("error hooks should be called") def step_impl_call_error(context): assert context.hook.before.called assert context.hook.error.called assert context.hook.finally_after.called -@then('non-error hooks should be called') +@then("non-error hooks should be called") def step_impl_call_non_error(context): assert context.hook.before.called assert context.hook.after.called @@ -32,39 +32,39 @@ def step_impl_call_non_error(context): def get_hook_from_name(context, hook_name): - if hook_name.lower() == 'before': + if hook_name.lower() == "before": return context.hook.before - elif hook_name.lower() == 'after': + elif hook_name.lower() == "after": return context.hook.after - elif hook_name.lower() == 'error': + elif hook_name.lower() == "error": return context.hook.error - elif hook_name.lower() == 'finally': + elif hook_name.lower() == "finally": return context.hook.finally_after else: - raise ValueError(str(hook_name) + ' is not a valid hook name') + raise ValueError(str(hook_name) + " is not a valid hook name") def convert_value_from_flag_type(value, flag_type): - if value == 'None': + if value == "None": return None - if flag_type.lower() == 'boolean': + if flag_type.lower() == "boolean": return bool(value) - elif flag_type.lower() == 'integer': + elif flag_type.lower() == "integer": return int(value) - elif flag_type.lower() == 'float': + elif flag_type.lower() == "float": return float(value) return value @then('"{hook_names}" hooks should have evaluation details') def step_impl_should_have_eval_details(context, hook_names): - for hook_name in hook_names.split(', '): + for hook_name in hook_names.split(", "): hook = get_hook_from_name(context, hook_name) for row in context.table: flag_type, key, value = row value = convert_value_from_flag_type(value, flag_type) - actual = hook.call_args[1]['details'].__dict__[key] + actual = hook.call_args[1]["details"].__dict__[key] if isinstance(actual, ErrorCode): actual = str(actual) diff --git a/tests/hook/test_hook_support.py b/tests/hook/test_hook_support.py index 5d0febff..19a86ec0 100644 --- a/tests/hook/test_hook_support.py +++ b/tests/hook/test_hook_support.py @@ -136,7 +136,7 @@ def test_after_hooks_run_after_method(mock_hook): def test_finally_after_hooks_run_finally_after_method(mock_hook): # Given - hook_context = HookContext("flag_key", FlagType.BOOLEAN, True, '') + hook_context = HookContext("flag_key", FlagType.BOOLEAN, True, "") flag_evaluation_details = FlagEvaluationDetails( hook_context.flag_key, "val", "unknown" )