From 84231daaf66552cfc4dde69517a991472640fe09 Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Thu, 20 Apr 2023 10:09:34 +0200 Subject: [PATCH 1/2] chore: split eval and resolution details objects, adjust providers accordingly Signed-off-by: Moritz Wiesinger --- .../flag_evaluation/resolution_details.py | 17 ++++++++++++ open_feature/provider/no_op_provider.py | 26 ++++++++----------- open_feature/provider/provider.py | 12 ++++----- 3 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 open_feature/flag_evaluation/resolution_details.py diff --git a/open_feature/flag_evaluation/resolution_details.py b/open_feature/flag_evaluation/resolution_details.py new file mode 100644 index 00000000..80c255cd --- /dev/null +++ b/open_feature/flag_evaluation/resolution_details.py @@ -0,0 +1,17 @@ +import typing +from dataclasses import dataclass + +from open_feature.exception.error_code import ErrorCode +from open_feature.flag_evaluation.reason import Reason + +T = typing.TypeVar("T", covariant=True) + + +@dataclass +class FlagResolutionDetails(typing.Generic[T]): + value: T + error_code: typing.Optional[ErrorCode] = None + error_message: typing.Optional[str] = None + reason: typing.Optional[Reason] = None + variant: typing.Optional[str] = None + flag_metadata: typing.Optional[str] = None diff --git a/open_feature/provider/no_op_provider.py b/open_feature/provider/no_op_provider.py index 18efa26b..2781ac17 100644 --- a/open_feature/provider/no_op_provider.py +++ b/open_feature/provider/no_op_provider.py @@ -3,6 +3,7 @@ from open_feature.evaluation_context.evaluation_context import EvaluationContext from open_feature.flag_evaluation.flag_evaluation_details import FlagEvaluationDetails from open_feature.flag_evaluation.reason import Reason +from open_feature.flag_evaluation.resolution_details import FlagResolutionDetails from open_feature.hooks.hook import Hook from open_feature.provider.metadata import Metadata from open_feature.provider.no_op_metadata import NoOpMetadata @@ -23,9 +24,8 @@ def resolve_boolean_details( flag_key: str, default_value: bool, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[bool]: - return FlagEvaluationDetails( - flag_key=flag_key, + ) -> FlagResolutionDetails[bool]: + return FlagResolutionDetails( value=default_value, reason=Reason.DEFAULT, variant=PASSED_IN_DEFAULT, @@ -36,9 +36,8 @@ def resolve_string_details( flag_key: str, default_value: str, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[str]: - return FlagEvaluationDetails( - flag_key=flag_key, + ) -> FlagResolutionDetails[str]: + return FlagResolutionDetails( value=default_value, reason=Reason.DEFAULT, variant=PASSED_IN_DEFAULT, @@ -49,9 +48,8 @@ def resolve_integer_details( flag_key: str, default_value: int, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[int]: - return FlagEvaluationDetails( - flag_key=flag_key, + ) -> FlagResolutionDetails[int]: + return FlagResolutionDetails( value=default_value, reason=Reason.DEFAULT, variant=PASSED_IN_DEFAULT, @@ -62,9 +60,8 @@ def resolve_float_details( flag_key: str, default_value: float, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[float]: - return FlagEvaluationDetails( - flag_key=flag_key, + ) -> FlagResolutionDetails[float]: + return FlagResolutionDetails( value=default_value, reason=Reason.DEFAULT, variant=PASSED_IN_DEFAULT, @@ -75,9 +72,8 @@ def resolve_object_details( flag_key: str, default_value: typing.Union[dict, list], evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[typing.Union[dict, list]]: - return FlagEvaluationDetails( - flag_key=flag_key, + ) -> FlagResolutionDetails[typing.Union[dict, list]]: + return FlagResolutionDetails( value=default_value, reason=Reason.DEFAULT, variant=PASSED_IN_DEFAULT, diff --git a/open_feature/provider/provider.py b/open_feature/provider/provider.py index da7d4ff6..3659f5a9 100644 --- a/open_feature/provider/provider.py +++ b/open_feature/provider/provider.py @@ -2,7 +2,7 @@ from abc import abstractmethod from open_feature.evaluation_context.evaluation_context import EvaluationContext -from open_feature.flag_evaluation.flag_evaluation_details import FlagEvaluationDetails +from open_feature.flag_evaluation.resolution_details import FlagResolutionDetails from open_feature.hooks.hook import Hook from open_feature.provider.metadata import Metadata @@ -22,7 +22,7 @@ def resolve_boolean_details( flag_key: str, default_value: bool, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[bool]: + ) -> FlagResolutionDetails[bool]: pass @abstractmethod @@ -31,7 +31,7 @@ def resolve_string_details( flag_key: str, default_value: str, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[str]: + ) -> FlagResolutionDetails[str]: pass @abstractmethod @@ -40,7 +40,7 @@ def resolve_integer_details( flag_key: str, default_value: int, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[int]: + ) -> FlagResolutionDetails[int]: pass @abstractmethod @@ -49,7 +49,7 @@ def resolve_float_details( flag_key: str, default_value: float, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[float]: + ) -> FlagResolutionDetails[float]: pass @abstractmethod @@ -58,5 +58,5 @@ def resolve_object_details( flag_key: str, default_value: typing.Union[dict, list], evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[typing.Union[dict, list]]: + ) -> FlagResolutionDetails[typing.Union[dict, list]]: pass From 3758aa4030eba82ec2314e540426e423b9b5d663 Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Thu, 20 Apr 2023 10:14:34 +0200 Subject: [PATCH 2/2] remove unused import Signed-off-by: Moritz Wiesinger --- open_feature/provider/no_op_provider.py | 1 - 1 file changed, 1 deletion(-) diff --git a/open_feature/provider/no_op_provider.py b/open_feature/provider/no_op_provider.py index 2781ac17..b5795cf1 100644 --- a/open_feature/provider/no_op_provider.py +++ b/open_feature/provider/no_op_provider.py @@ -1,7 +1,6 @@ import typing from open_feature.evaluation_context.evaluation_context import EvaluationContext -from open_feature.flag_evaluation.flag_evaluation_details import FlagEvaluationDetails from open_feature.flag_evaluation.reason import Reason from open_feature.flag_evaluation.resolution_details import FlagResolutionDetails from open_feature.hooks.hook import Hook