Skip to content

Commit

Permalink
feature/spec-0.2.0: Remove number flag evaluation in favour of strong…
Browse files Browse the repository at this point in the history
…ly typed counterparts

Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>

Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
  • Loading branch information
ajhelsby committed Nov 3, 2022
1 parent 78fb954 commit c037b31
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 50 deletions.
7 changes: 3 additions & 4 deletions open_feature/flag_evaluation/flag_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
38 changes: 3 additions & 35 deletions open_feature/open_feature_client.py
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand All @@ -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,
Expand Down
17 changes: 15 additions & 2 deletions open_feature/provider/no_op_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
):
Expand Down
14 changes: 11 additions & 3 deletions open_feature/provider/provider.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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={})
```
Expand Down
14 changes: 12 additions & 2 deletions tests/provider/test_no_op_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 0 additions & 3 deletions tests/test_open_feature_client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from numbers import Number
from unittest.mock import MagicMock

import pytest
Expand All @@ -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"),
(
Expand Down Expand Up @@ -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"),
(
Expand Down

0 comments on commit c037b31

Please sign in to comment.