python-sdk: Fix issues raised in code review to match a more pythonic style

This commit is contained in:
Andrew Helsby 2022-05-30 15:13:10 +04:00
parent 029801f8df
commit d15c141cd0
11 changed files with 120 additions and 110 deletions

View File

@ -25,13 +25,3 @@ repos:
hooks:
- id: flake8
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 ]

View File

@ -1,9 +1,9 @@
# Open Feature Python SDK
## Requirements
- Python 3.8
- Python 3.8+
## Installation
## How to use
## How to use

View File

@ -1,3 +1,4 @@
import typing
from numbers import Number
from open_feature import OpenFeature
@ -10,79 +11,103 @@ class OpenFeatureClient:
self.version = version
self.context = context
self.hooks = hooks
self.provider = OpenFeature.get_provider()
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:
return self.evaluate_flag(
FlagType.BOOLEAN,
key,
defaultValue,
evaluationContext,
flagEvaluationOptions,
default_value,
evaluation_context,
flag_evaluation_options,
)
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(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_boolean_details(
key, default_value, evaluation_context, flag_evaluation_options
)
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:
return self.evaluate_flag(
FlagType.BOOLEAN,
FlagType.STRING,
key,
defaultValue,
evaluationContext,
flagEvaluationOptions,
default_value,
evaluation_context,
flag_evaluation_options,
)
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(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_string_details(
key, default_value, evaluation_context, flag_evaluation_options
)
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:
return self.evaluate_flag(
FlagType.BOOLEAN,
FlagType.NUMBER,
key,
defaultValue,
evaluationContext,
flagEvaluationOptions,
default_value,
evaluation_context,
flag_evaluation_options,
)
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(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_number_details(
key, default_value, evaluation_context, flag_evaluation_options
)
def evaluate_flag(
self,
flag_type: FlagType,
key: str,
defaultValue: bool,
evaluationContext,
flagEvaluationOptions,
default_value: bool,
evaluation_context: typing.Any = None,
flag_evaluation_options: typing.Any = None,
):
provider = OpenFeature.get_provider()
if flag_type is FlagType.BOOLEAN:
return provider.getBooleanEvaluation(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_boolean_value(
key, default_value, evaluation_context, flag_evaluation_options
)
if flag_type is FlagType.NUMBER:
return provider.getNumberEvaluation(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_number_value(
key, default_value, evaluation_context, flag_evaluation_options
)
if flag_type is FlagType.STRING:
return provider.getStringEvaluation(
key, defaultValue, evaluationContext, flagEvaluationOptions
return self.provider.get_string_value(
key, default_value, evaluation_context, flag_evaluation_options
)

View File

@ -10,7 +10,7 @@ class OpenFeature:
@staticmethod
def set_provider(provider_type: AbstractProvider):
if provider_type is None:
print("No provider")
raise TypeError("No provider")
global provider
provider = provider_type

View File

@ -1,3 +1,4 @@
import typing
from numbers import Number
from os import environ
@ -15,29 +16,50 @@ class FlagsmithProvider(AbstractProvider):
else:
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)
if not isinstance(value, bool):
raise Exception()
return value
def get_boolean_details(self, key: str, defaultValue: bool):
def get_boolean_details(self, key: str, default_value: bool):
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)
if not isinstance(value, str):
raise Exception()
return value
def get_string_details(self, key: str, defaultValue: str):
def get_string_details(self, key: str, default_value: str):
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)
if not isinstance(value, Number):
raise Exception()
return value
def get_number_details(self, key: str, defaultValue: Number):
def get_number_details(self, key: str, default_value: Number):
pass

View File

@ -1,92 +1,65 @@
import typing
from abc import abstractmethod
from numbers import Number
class AbstractProvider:
@abstractmethod
def get_boolean_value(self, key: str, defaultValue: bool) -> bool:
pass
@abstractmethod
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:
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
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
@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
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:
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
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
@abstractmethod
def get_number_value(self, key: str, defaultValue: bool) -> Number:
pass
@abstractmethod
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:
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
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