From 68b479664d6361aa8fe413c7adb13c30c5a3f327 Mon Sep 17 00:00:00 2001 From: Moritz Wiesinger Date: Mon, 24 Apr 2023 14:28:05 +0200 Subject: [PATCH] chore: split eval and resolution details objects, adjust providers accordingly (#103) Signed-off-by: Moritz Wiesinger --- .../flag_evaluation/resolution_details.py | 17 ++++++++++++ open_feature/provider/no_op_provider.py | 27 ++++++++----------- open_feature/provider/provider.py | 12 ++++----- 3 files changed, 34 insertions(+), 22 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 0000000..80c255c --- /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 18efa26..b5795cf 100644 --- a/open_feature/provider/no_op_provider.py +++ b/open_feature/provider/no_op_provider.py @@ -1,8 +1,8 @@ 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 from open_feature.provider.metadata import Metadata from open_feature.provider.no_op_metadata import NoOpMetadata @@ -23,9 +23,8 @@ class NoOpProvider(AbstractProvider): 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 +35,8 @@ class NoOpProvider(AbstractProvider): 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 +47,8 @@ class NoOpProvider(AbstractProvider): 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 +59,8 @@ class NoOpProvider(AbstractProvider): 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 +71,8 @@ class NoOpProvider(AbstractProvider): 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 da7d4ff..3659f5a 100644 --- a/open_feature/provider/provider.py +++ b/open_feature/provider/provider.py @@ -2,7 +2,7 @@ import typing 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 @@ class AbstractProvider: flag_key: str, default_value: bool, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[bool]: + ) -> FlagResolutionDetails[bool]: pass @abstractmethod @@ -31,7 +31,7 @@ class AbstractProvider: flag_key: str, default_value: str, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[str]: + ) -> FlagResolutionDetails[str]: pass @abstractmethod @@ -40,7 +40,7 @@ class AbstractProvider: flag_key: str, default_value: int, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[int]: + ) -> FlagResolutionDetails[int]: pass @abstractmethod @@ -49,7 +49,7 @@ class AbstractProvider: flag_key: str, default_value: float, evaluation_context: typing.Optional[EvaluationContext] = None, - ) -> FlagEvaluationDetails[float]: + ) -> FlagResolutionDetails[float]: pass @abstractmethod @@ -58,5 +58,5 @@ class AbstractProvider: 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