chore: split eval and resolution details objects, adjust providers accordingly (#103)

Signed-off-by: Moritz Wiesinger <moritz.wiesinger@dynatrace.com>
This commit is contained in:
Moritz Wiesinger 2023-04-24 14:28:05 +02:00 committed by GitHub
parent 5259dcf241
commit 68b479664d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 22 deletions

View File

@ -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

View File

@ -1,8 +1,8 @@
import typing import typing
from open_feature.evaluation_context.evaluation_context import EvaluationContext 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.reason import Reason
from open_feature.flag_evaluation.resolution_details import FlagResolutionDetails
from open_feature.hooks.hook import Hook from open_feature.hooks.hook import Hook
from open_feature.provider.metadata import Metadata from open_feature.provider.metadata import Metadata
from open_feature.provider.no_op_metadata import NoOpMetadata from open_feature.provider.no_op_metadata import NoOpMetadata
@ -23,9 +23,8 @@ class NoOpProvider(AbstractProvider):
flag_key: str, flag_key: str,
default_value: bool, default_value: bool,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[bool]: ) -> FlagResolutionDetails[bool]:
return FlagEvaluationDetails( return FlagResolutionDetails(
flag_key=flag_key,
value=default_value, value=default_value,
reason=Reason.DEFAULT, reason=Reason.DEFAULT,
variant=PASSED_IN_DEFAULT, variant=PASSED_IN_DEFAULT,
@ -36,9 +35,8 @@ class NoOpProvider(AbstractProvider):
flag_key: str, flag_key: str,
default_value: str, default_value: str,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[str]: ) -> FlagResolutionDetails[str]:
return FlagEvaluationDetails( return FlagResolutionDetails(
flag_key=flag_key,
value=default_value, value=default_value,
reason=Reason.DEFAULT, reason=Reason.DEFAULT,
variant=PASSED_IN_DEFAULT, variant=PASSED_IN_DEFAULT,
@ -49,9 +47,8 @@ class NoOpProvider(AbstractProvider):
flag_key: str, flag_key: str,
default_value: int, default_value: int,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[int]: ) -> FlagResolutionDetails[int]:
return FlagEvaluationDetails( return FlagResolutionDetails(
flag_key=flag_key,
value=default_value, value=default_value,
reason=Reason.DEFAULT, reason=Reason.DEFAULT,
variant=PASSED_IN_DEFAULT, variant=PASSED_IN_DEFAULT,
@ -62,9 +59,8 @@ class NoOpProvider(AbstractProvider):
flag_key: str, flag_key: str,
default_value: float, default_value: float,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[float]: ) -> FlagResolutionDetails[float]:
return FlagEvaluationDetails( return FlagResolutionDetails(
flag_key=flag_key,
value=default_value, value=default_value,
reason=Reason.DEFAULT, reason=Reason.DEFAULT,
variant=PASSED_IN_DEFAULT, variant=PASSED_IN_DEFAULT,
@ -75,9 +71,8 @@ class NoOpProvider(AbstractProvider):
flag_key: str, flag_key: str,
default_value: typing.Union[dict, list], default_value: typing.Union[dict, list],
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[typing.Union[dict, list]]: ) -> FlagResolutionDetails[typing.Union[dict, list]]:
return FlagEvaluationDetails( return FlagResolutionDetails(
flag_key=flag_key,
value=default_value, value=default_value,
reason=Reason.DEFAULT, reason=Reason.DEFAULT,
variant=PASSED_IN_DEFAULT, variant=PASSED_IN_DEFAULT,

View File

@ -2,7 +2,7 @@ import typing
from abc import abstractmethod from abc import abstractmethod
from open_feature.evaluation_context.evaluation_context import EvaluationContext 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.hooks.hook import Hook
from open_feature.provider.metadata import Metadata from open_feature.provider.metadata import Metadata
@ -22,7 +22,7 @@ class AbstractProvider:
flag_key: str, flag_key: str,
default_value: bool, default_value: bool,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[bool]: ) -> FlagResolutionDetails[bool]:
pass pass
@abstractmethod @abstractmethod
@ -31,7 +31,7 @@ class AbstractProvider:
flag_key: str, flag_key: str,
default_value: str, default_value: str,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[str]: ) -> FlagResolutionDetails[str]:
pass pass
@abstractmethod @abstractmethod
@ -40,7 +40,7 @@ class AbstractProvider:
flag_key: str, flag_key: str,
default_value: int, default_value: int,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[int]: ) -> FlagResolutionDetails[int]:
pass pass
@abstractmethod @abstractmethod
@ -49,7 +49,7 @@ class AbstractProvider:
flag_key: str, flag_key: str,
default_value: float, default_value: float,
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[float]: ) -> FlagResolutionDetails[float]:
pass pass
@abstractmethod @abstractmethod
@ -58,5 +58,5 @@ class AbstractProvider:
flag_key: str, flag_key: str,
default_value: typing.Union[dict, list], default_value: typing.Union[dict, list],
evaluation_context: typing.Optional[EvaluationContext] = None, evaluation_context: typing.Optional[EvaluationContext] = None,
) -> FlagEvaluationDetails[typing.Union[dict, list]]: ) -> FlagResolutionDetails[typing.Union[dict, list]]:
pass pass