From e38c4a141d9b2bbbf0fe145f191882e07d10139e Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Fri, 26 Jan 2024 10:43:05 -0500 Subject: [PATCH 1/2] fix: Allow string values for `FlagEvaluationDetails.reason` and ``FlagResolutionDetails.reason` Signed-off-by: Matthew Keeler --- openfeature/flag_evaluation.py | 4 ++-- tests/test_flag_evaluation.py | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/openfeature/flag_evaluation.py b/openfeature/flag_evaluation.py index 251351da..26b565ad 100644 --- a/openfeature/flag_evaluation.py +++ b/openfeature/flag_evaluation.py @@ -40,7 +40,7 @@ class FlagEvaluationDetails(typing.Generic[T_co]): value: T_co variant: typing.Optional[str] = None flag_metadata: FlagMetadata = field(default_factory=dict) - reason: typing.Optional[Reason] = None + reason: typing.Optional[typing.Union[str, Reason]] = None error_code: typing.Optional[ErrorCode] = None error_message: typing.Optional[str] = None @@ -59,6 +59,6 @@ class FlagResolutionDetails(typing.Generic[U_co]): value: U_co error_code: typing.Optional[ErrorCode] = None error_message: typing.Optional[str] = None - reason: typing.Optional[Reason] = None + reason: typing.Optional[typing.Union[str, Reason]] = None variant: typing.Optional[str] = None flag_metadata: FlagMetadata = field(default_factory=dict) diff --git a/tests/test_flag_evaluation.py b/tests/test_flag_evaluation.py index ec6d9411..d60610f2 100644 --- a/tests/test_flag_evaluation.py +++ b/tests/test_flag_evaluation.py @@ -30,6 +30,32 @@ def test_evaluation_details_reason_should_be_a_string(): assert error_code == flag_details.error_code assert error_message == flag_details.error_message assert reason == flag_details.reason + assert isinstance(flag_details.reason, str) + + +def test_evaluation_details_reason_can_be_arbitrary_string(): + # Given + flag_key = "my-flag" + flag_value = 100 + variant = "1-hundred" + flag_metadata = {} + reason = "Non-standard reason" + error_code = ErrorCode.GENERAL + error_message = "message" + + # When + flag_details = FlagEvaluationDetails( + flag_key, + flag_value, + variant, + flag_metadata, + reason, + error_code, + error_message, + ) + + # Then + assert reason == flag_details.reason def test_evaluation_details_reason_should_be_a_string_when_set(): @@ -54,3 +80,4 @@ def test_evaluation_details_reason_should_be_a_string_when_set(): # Then assert Reason.STATIC == flag_details.reason # noqa: SIM300 + assert isinstance(flag_details.reason, str) From d35a2ddaf07c9b4a0e52de2647443c98f8847d09 Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Mon, 29 Jan 2024 10:12:46 -0500 Subject: [PATCH 2/2] Remove useless test Signed-off-by: Matthew Keeler --- tests/test_flag_evaluation.py | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/tests/test_flag_evaluation.py b/tests/test_flag_evaluation.py index d60610f2..ec6d9411 100644 --- a/tests/test_flag_evaluation.py +++ b/tests/test_flag_evaluation.py @@ -30,32 +30,6 @@ def test_evaluation_details_reason_should_be_a_string(): assert error_code == flag_details.error_code assert error_message == flag_details.error_message assert reason == flag_details.reason - assert isinstance(flag_details.reason, str) - - -def test_evaluation_details_reason_can_be_arbitrary_string(): - # Given - flag_key = "my-flag" - flag_value = 100 - variant = "1-hundred" - flag_metadata = {} - reason = "Non-standard reason" - error_code = ErrorCode.GENERAL - error_message = "message" - - # When - flag_details = FlagEvaluationDetails( - flag_key, - flag_value, - variant, - flag_metadata, - reason, - error_code, - error_message, - ) - - # Then - assert reason == flag_details.reason def test_evaluation_details_reason_should_be_a_string_when_set(): @@ -80,4 +54,3 @@ def test_evaluation_details_reason_should_be_a_string_when_set(): # Then assert Reason.STATIC == flag_details.reason # noqa: SIM300 - assert isinstance(flag_details.reason, str)