diff --git a/open_feature/flag_evaluation/flag_type.py b/open_feature/flag_evaluation/flag_type.py index eec9604c..52d19d05 100644 --- a/open_feature/flag_evaluation/flag_type.py +++ b/open_feature/flag_evaluation/flag_type.py @@ -4,7 +4,6 @@ class FlagType(Enum): BOOLEAN = 1 STRING = 2 - NUMBER = 3 - OBJECT = 4 - FLOAT = 5 - INTEGER = 6 + OBJECT = 3 + FLOAT = 4 + INTEGER = 5 diff --git a/open_feature/open_feature_client.py b/open_feature/open_feature_client.py index f2479c27..635a5417 100644 --- a/open_feature/open_feature_client.py +++ b/open_feature/open_feature_client.py @@ -1,6 +1,5 @@ import logging import typing -from numbers import Number from open_feature.evaluation_context.evaluation_context import EvaluationContext from open_feature.exception.exceptions import ( @@ -106,36 +105,6 @@ def get_string_details( flag_evaluation_options, ) - def get_number_value( - self, - flag_key: str, - default_value: Number, - evaluation_context: EvaluationContext = None, - flag_evaluation_options: typing.Any = None, - ) -> Number: - return self.evaluate_flag_details( - FlagType.NUMBER, - flag_key, - default_value, - evaluation_context, - flag_evaluation_options, - ).value - - def get_number_details( - self, - flag_key: str, - default_value: Number, - evaluation_context: EvaluationContext = None, - flag_evaluation_options: typing.Any = None, - ) -> FlagEvaluationDetails: - return self.evaluate_flag_details( - FlagType.NUMBER, - flag_key, - default_value, - evaluation_context, - flag_evaluation_options, - ) - def get_integer_value( self, flag_key: str, @@ -356,9 +325,8 @@ def _create_provider_evaluation( get_details_callable = { FlagType.BOOLEAN: self.provider.get_boolean_details, - FlagType.NUMBER: self.provider.get_number_details, - FlagType.INTEGER: self.provider.get_number_details, - FlagType.FLOAT: self.provider.get_number_details, + FlagType.INTEGER: self.provider.get_integer_details, + FlagType.FLOAT: self.provider.get_float_details, FlagType.OBJECT: self.provider.get_object_details, FlagType.STRING: self.provider.get_string_details, }.get(flag_type) @@ -374,7 +342,7 @@ def _create_provider_evaluation( return value @staticmethod - def _convert_numeric_types(flag_type: FlagType, current_value: Number): + def _convert_numeric_types(flag_type: FlagType, current_value): converter = { FlagType.FLOAT: float, FlagType.INTEGER: int, diff --git a/open_feature/provider/no_op_provider.py b/open_feature/provider/no_op_provider.py index 8dd210d5..8916ffd0 100644 --- a/open_feature/provider/no_op_provider.py +++ b/open_feature/provider/no_op_provider.py @@ -45,9 +45,22 @@ def get_string_details( variant=PASSED_IN_DEFAULT, ) - def get_number_details( + def get_integer_details( self, - flag_key: str, + flag_key: int, + default_value: Number, + evaluation_context: EvaluationContext = None, + ): + return FlagEvaluationDetails( + flag_key=flag_key, + value=default_value, + reason=Reason.DEFAULT, + variant=PASSED_IN_DEFAULT, + ) + + def get_float_details( + self, + flag_key: float, default_value: Number, evaluation_context: EvaluationContext = None, ): diff --git a/open_feature/provider/provider.py b/open_feature/provider/provider.py index 957beb14..e93b221b 100644 --- a/open_feature/provider/provider.py +++ b/open_feature/provider/provider.py @@ -1,6 +1,5 @@ import typing from abc import abstractmethod -from numbers import Number from open_feature.evaluation_context.evaluation_context import EvaluationContext from open_feature.hooks.hook import Hook @@ -35,10 +34,19 @@ def get_string_details( pass @abstractmethod - def get_number_details( + def get_integer_details( self, flag_key: str, - default_value: Number, + default_value: int, + evaluation_context: EvaluationContext = EvaluationContext(), + ): + pass + + @abstractmethod + def get_float_details( + self, + flag_key: str, + default_value: float, evaluation_context: EvaluationContext = EvaluationContext(), ): pass diff --git a/readme.md b/readme.md index 64405d0a..9486b40d 100644 --- a/readme.md +++ b/readme.md @@ -19,7 +19,8 @@ While Boolean provides the simplest introduction, we offer a variety of flag typ # Depending on the flag type, use one of the methods below flag_key = "PROVIDER_FLAG" boolean_result = open_feature_client.get_boolean_value(key=flag_key,default_value=False) -number_result = open_feature_client.get_number_value(key=flag_key,default_value=-1) +integer_result = open_feature_client.get_integer_value(key=flag_key,default_value=-1) +float_result = open_feature_client.get_float_value(key=flag_key,default_value=-1) string_result = open_feature_client.get_string_value(key=flag_key,default_value="") object_result = open_feature_client.get_object_value(key=flag_key,default_value={}) ``` diff --git a/tests/provider/test_no_op_provider.py b/tests/provider/test_no_op_provider.py index 1e1e4b96..a615bb5c 100644 --- a/tests/provider/test_no_op_provider.py +++ b/tests/provider/test_no_op_provider.py @@ -23,16 +23,26 @@ def test_should_get_boolean_flag_from_no_op(): assert isinstance(flag.value, bool) -def test_should_get_number_flag_from_no_op(): +def test_should_get_integer_flag_from_no_op(): # Given # When - flag = NoOpProvider().get_number_details(flag_key="Key", default_value=100) + flag = NoOpProvider().get_integer_details(flag_key="Key", default_value=100) # Then assert flag is not None assert flag.value == 100 assert isinstance(flag.value, Number) +def test_should_get_float_flag_from_no_op(): + # Given + # When + flag = NoOpProvider().get_float_details(flag_key="Key", default_value=10.23) + # Then + assert flag is not None + assert flag.value == 10.23 + assert isinstance(flag.value, Number) + + def test_should_get_string_flag_from_no_op(): # Given # When diff --git a/tests/test_open_feature_client.py b/tests/test_open_feature_client.py index 538ca05f..c5ff42f1 100644 --- a/tests/test_open_feature_client.py +++ b/tests/test_open_feature_client.py @@ -1,4 +1,3 @@ -from numbers import Number from unittest.mock import MagicMock import pytest @@ -14,7 +13,6 @@ ( (bool, True, "get_boolean_value"), (str, "String", "get_string_value"), - (Number, 100, "get_number_value"), (int, 100, "get_integer_value"), (float, 10.23, "get_float_value"), ( @@ -47,7 +45,6 @@ def test_should_get_flag_value_based_on_method_type( ( (bool, True, "get_boolean_details"), (str, "String", "get_string_details"), - (Number, 100, "get_number_details"), (int, 100, "get_integer_details"), (float, 10.23, "get_float_details"), (