From 1e9e37f5bf8d78721e662d214b7ba0a40aa754ff Mon Sep 17 00:00:00 2001 From: Federico Bond Date: Fri, 7 Jul 2023 13:06:41 -0300 Subject: [PATCH] refactor: make Reason enum values instances of str Signed-off-by: Federico Bond --- open_feature/_backports/__init__.py | 0 open_feature/_backports/strenum.py | 11 +++++++++++ .../flag_evaluation/flag_evaluation_details.py | 8 -------- open_feature/flag_evaluation/reason.py | 4 ++-- tests/test_open_feature_client.py | 6 +++--- tests/test_open_feature_flag_evaluation.py | 4 ++-- 6 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 open_feature/_backports/__init__.py create mode 100644 open_feature/_backports/strenum.py diff --git a/open_feature/_backports/__init__.py b/open_feature/_backports/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/open_feature/_backports/strenum.py b/open_feature/_backports/strenum.py new file mode 100644 index 00000000..dee9aa02 --- /dev/null +++ b/open_feature/_backports/strenum.py @@ -0,0 +1,11 @@ +try: + from enum import StrEnum +except ImportError: + from enum import Enum + + class StrEnum(str, Enum): + """ + Backport StrEnum for Python <3.11 + """ + + pass diff --git a/open_feature/flag_evaluation/flag_evaluation_details.py b/open_feature/flag_evaluation/flag_evaluation_details.py index 73f075c5..2bf9fceb 100644 --- a/open_feature/flag_evaluation/flag_evaluation_details.py +++ b/open_feature/flag_evaluation/flag_evaluation_details.py @@ -15,11 +15,3 @@ class FlagEvaluationDetails(typing.Generic[T]): reason: typing.Optional[Reason] = None error_code: typing.Optional[ErrorCode] = None error_message: typing.Optional[str] = None - - @property - def reason(self) -> str: - return self._reason.value - - @reason.setter - def reason(self, reason: Reason): - self._reason = reason diff --git a/open_feature/flag_evaluation/reason.py b/open_feature/flag_evaluation/reason.py index f9cbcf8a..e2b61eb1 100644 --- a/open_feature/flag_evaluation/reason.py +++ b/open_feature/flag_evaluation/reason.py @@ -1,7 +1,7 @@ -from enum import Enum +from open_feature._backports.strenum import StrEnum -class Reason(Enum): +class Reason(StrEnum): CACHED = "CACHED" DEFAULT = "DEFAULT" DISABLED = "DISABLED" diff --git a/tests/test_open_feature_client.py b/tests/test_open_feature_client.py index d69c3cd9..6ac18962 100644 --- a/tests/test_open_feature_client.py +++ b/tests/test_open_feature_client.py @@ -95,7 +95,7 @@ def test_should_raise_exception_when_invalid_flag_type_provided(no_op_provider_c assert flag.value assert flag.error_message == "Unknown flag type" assert flag.error_code == ErrorCode.GENERAL - assert flag.reason == Reason.ERROR.value + assert flag.reason == Reason.ERROR def test_should_handle_a_generic_exception_thrown_by_a_provider(no_op_provider_client): @@ -111,7 +111,7 @@ def test_should_handle_a_generic_exception_thrown_by_a_provider(no_op_provider_c assert flag_details is not None assert flag_details.value assert isinstance(flag_details.value, bool) - assert flag_details.reason == Reason.ERROR.value + assert flag_details.reason == Reason.ERROR assert flag_details.error_message == "Generic exception raised" @@ -133,7 +133,7 @@ def test_should_handle_an_open_feature_exception_thrown_by_a_provider( assert flag_details is not None assert flag_details.value assert isinstance(flag_details.value, bool) - assert flag_details.reason == Reason.ERROR.value + assert flag_details.reason == Reason.ERROR assert flag_details.error_message == "error_message" diff --git a/tests/test_open_feature_flag_evaluation.py b/tests/test_open_feature_flag_evaluation.py index 32182383..ee408d90 100644 --- a/tests/test_open_feature_flag_evaluation.py +++ b/tests/test_open_feature_flag_evaluation.py @@ -28,7 +28,7 @@ def test_evaulation_details_reason_should_be_a_string(): assert variant == flag_details.variant assert error_code == flag_details.error_code assert error_message == flag_details.error_message - assert reason.value == flag_details.reason + assert reason == flag_details.reason def test_evaulation_details_reason_should_be_a_string_when_set(): @@ -52,4 +52,4 @@ def test_evaulation_details_reason_should_be_a_string_when_set(): flag_details.reason = Reason.STATIC # Then - assert Reason.STATIC.value == flag_details.reason + assert Reason.STATIC == flag_details.reason