python-sdk: Fix issues raised in code review to match a more pythonic style
This commit is contained in:
parent
029801f8df
commit
d15c141cd0
|
|
@ -25,13 +25,3 @@ repos:
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
additional_dependencies: [ "flake8-print", "flake8-builtins", "flake8-functions==0.0.4" ]
|
additional_dependencies: [ "flake8-print", "flake8-builtins", "flake8-functions==0.0.4" ]
|
||||||
|
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: tests
|
|
||||||
name: Unit Tests
|
|
||||||
entry: pipenv run tests
|
|
||||||
language: python
|
|
||||||
'types': [ python ]
|
|
||||||
pass_filenames: false
|
|
||||||
stages: [ push ]
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Open Feature Python SDK
|
# Open Feature Python SDK
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
- Python 3.8
|
- Python 3.8+
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import typing
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
|
|
||||||
from open_feature import OpenFeature
|
from open_feature import OpenFeature
|
||||||
|
|
@ -10,79 +11,103 @@ class OpenFeatureClient:
|
||||||
self.version = version
|
self.version = version
|
||||||
self.context = context
|
self.context = context
|
||||||
self.hooks = hooks
|
self.hooks = hooks
|
||||||
|
self.provider = OpenFeature.get_provider()
|
||||||
|
|
||||||
def get_boolean_value(
|
def get_boolean_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
return self.evaluate_flag(
|
return self.evaluate_flag(
|
||||||
FlagType.BOOLEAN,
|
FlagType.BOOLEAN,
|
||||||
key,
|
key,
|
||||||
defaultValue,
|
default_value,
|
||||||
evaluationContext,
|
evaluation_context,
|
||||||
flagEvaluationOptions,
|
flag_evaluation_options,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_boolean_details(
|
def get_boolean_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
return self.get_boolean_details(
|
return self.provider.get_boolean_details(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_string_value(
|
def get_string_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: str,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
return self.evaluate_flag(
|
return self.evaluate_flag(
|
||||||
FlagType.BOOLEAN,
|
FlagType.STRING,
|
||||||
key,
|
key,
|
||||||
defaultValue,
|
default_value,
|
||||||
evaluationContext,
|
evaluation_context,
|
||||||
flagEvaluationOptions,
|
flag_evaluation_options,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_string_details(
|
def get_string_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
return self.get_string_details(
|
return self.provider.get_string_details(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_number_value(
|
def get_number_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: Number,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> Number:
|
) -> Number:
|
||||||
return self.evaluate_flag(
|
return self.evaluate_flag(
|
||||||
FlagType.BOOLEAN,
|
FlagType.NUMBER,
|
||||||
key,
|
key,
|
||||||
defaultValue,
|
default_value,
|
||||||
evaluationContext,
|
evaluation_context,
|
||||||
flagEvaluationOptions,
|
flag_evaluation_options,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_number_details(
|
def get_number_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
return self.get_number_details(
|
return self.provider.get_number_details(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
|
|
||||||
def evaluate_flag(
|
def evaluate_flag(
|
||||||
self,
|
self,
|
||||||
flag_type: FlagType,
|
flag_type: FlagType,
|
||||||
key: str,
|
key: str,
|
||||||
defaultValue: bool,
|
default_value: bool,
|
||||||
evaluationContext,
|
evaluation_context: typing.Any = None,
|
||||||
flagEvaluationOptions,
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
provider = OpenFeature.get_provider()
|
|
||||||
if flag_type is FlagType.BOOLEAN:
|
if flag_type is FlagType.BOOLEAN:
|
||||||
return provider.getBooleanEvaluation(
|
return self.provider.get_boolean_value(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
if flag_type is FlagType.NUMBER:
|
if flag_type is FlagType.NUMBER:
|
||||||
return provider.getNumberEvaluation(
|
return self.provider.get_number_value(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
if flag_type is FlagType.STRING:
|
if flag_type is FlagType.STRING:
|
||||||
return provider.getStringEvaluation(
|
return self.provider.get_string_value(
|
||||||
key, defaultValue, evaluationContext, flagEvaluationOptions
|
key, default_value, evaluation_context, flag_evaluation_options
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ class OpenFeature:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def set_provider(provider_type: AbstractProvider):
|
def set_provider(provider_type: AbstractProvider):
|
||||||
if provider_type is None:
|
if provider_type is None:
|
||||||
print("No provider")
|
raise TypeError("No provider")
|
||||||
global provider
|
global provider
|
||||||
provider = provider_type
|
provider = provider_type
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import typing
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
from os import environ
|
from os import environ
|
||||||
|
|
||||||
|
|
@ -15,29 +16,50 @@ class FlagsmithProvider(AbstractProvider):
|
||||||
else:
|
else:
|
||||||
self.flagsmith_provider = flagsmith
|
self.flagsmith_provider = flagsmith
|
||||||
|
|
||||||
def get_boolean_value(self, key: str, defaultValue: bool) -> bool:
|
def get_boolean_value(
|
||||||
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
|
) -> bool:
|
||||||
|
|
||||||
value = self.flagsmith_provider.get_value(key)
|
value = self.flagsmith_provider.get_value(key)
|
||||||
if not isinstance(value, bool):
|
if not isinstance(value, bool):
|
||||||
raise Exception()
|
raise Exception()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def get_boolean_details(self, key: str, defaultValue: bool):
|
def get_boolean_details(self, key: str, default_value: bool):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_string_value(self, key: str, defaultValue: str) -> str:
|
def get_string_value(
|
||||||
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: str,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
|
) -> str:
|
||||||
|
|
||||||
value = self.flagsmith_provider.get_value(key)
|
value = self.flagsmith_provider.get_value(key)
|
||||||
if not isinstance(value, str):
|
if not isinstance(value, str):
|
||||||
raise Exception()
|
raise Exception()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def get_string_details(self, key: str, defaultValue: str):
|
def get_string_details(self, key: str, default_value: str):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_number_value(self, key: str, defaultValue: Number) -> Number:
|
def get_number_value(
|
||||||
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: Number,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
|
) -> Number:
|
||||||
|
|
||||||
value = self.flagsmith_provider.get_value(key)
|
value = self.flagsmith_provider.get_value(key)
|
||||||
if not isinstance(value, Number):
|
if not isinstance(value, Number):
|
||||||
raise Exception()
|
raise Exception()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def get_number_details(self, key: str, defaultValue: Number):
|
def get_number_details(self, key: str, default_value: Number):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -1,92 +1,65 @@
|
||||||
|
import typing
|
||||||
from abc import abstractmethod
|
from abc import abstractmethod
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
|
|
||||||
|
|
||||||
class AbstractProvider:
|
class AbstractProvider:
|
||||||
@abstractmethod
|
|
||||||
def get_boolean_value(self, key: str, defaultValue: bool) -> bool:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_boolean_value(
|
def get_boolean_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_boolean_value(
|
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
|
||||||
) -> bool:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_boolean_details(self, key: str, defaultValue: bool):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_boolean_details(self, key: str, defaultValue: bool, evaluationContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_boolean_details(
|
def get_boolean_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: bool,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_string_value(self, key: str, defaultValue: bool) -> str:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_string_value(self, key: str, defaultValue: bool, evaluationContext) -> str:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_string_value(
|
def get_string_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: str,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_string_details(self, key: str, defaultValue: bool):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_string_details(self, key: str, defaultValue: bool, evaluationContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_string_details(
|
def get_string_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: str,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_number_value(self, key: str, defaultValue: bool) -> Number:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_number_value(
|
def get_number_value(
|
||||||
self, key: str, defaultValue: bool, evaluationContext
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: Number,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
) -> Number:
|
) -> Number:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_number_value(
|
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
|
||||||
) -> Number:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_number_details(self, key: str, defaultValue: bool):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_number_details(self, key: str, defaultValue: bool, evaluationContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_number_details(
|
def get_number_details(
|
||||||
self, key: str, defaultValue: bool, evaluationContext, flagEvaluationOptions
|
self,
|
||||||
|
key: str,
|
||||||
|
default_value: Number,
|
||||||
|
evaluation_context: typing.Any = None,
|
||||||
|
flag_evaluation_options: typing.Any = None,
|
||||||
):
|
):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue