feat: Add metadata to providers (#26)

* provider-metadata: Add metadata to providers
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>

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

* feature/provider-metadata: Test extending metadata class
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>

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

* feature/provider-metadata: Change no op metadata
Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>

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

Signed-off-by: Andrew Helsby <ajhelsby@hotmail.com>
This commit is contained in:
Andrew Helsby 2022-10-18 16:34:06 +04:00 committed by GitHub
parent b44224be0d
commit b39cced329
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 3 deletions

View File

@ -0,0 +1,6 @@
from dataclasses import dataclass
@dataclass
class Metadata:
name: str

View File

@ -0,0 +1,9 @@
from dataclasses import dataclass
from open_feature.provider.metadata import Metadata
@dataclass
class NoOpMetadata(Metadata):
name: str = "No-op Provider"
is_default_provider: bool = True

View File

@ -3,14 +3,16 @@ from numbers import Number
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.provider.metadata import Metadata
from open_feature.provider.no_op_metadata import NoOpMetadata
from open_feature.provider.provider import AbstractProvider
PASSED_IN_DEFAULT = "Passed in default"
class NoOpProvider(AbstractProvider):
def get_name(self) -> str:
return "No-op Provider"
def get_metadata(self) -> Metadata:
return NoOpMetadata()
def get_boolean_details(
self,

View File

@ -2,11 +2,12 @@ from abc import abstractmethod
from numbers import Number
from open_feature.evaluation_context.evaluation_context import EvaluationContext
from open_feature.provider.metadata import Metadata
class AbstractProvider:
@abstractmethod
def get_name(self) -> str:
def get_metadata(self) -> Metadata:
pass
@abstractmethod

View File

@ -10,6 +10,16 @@ def setup():
assert isinstance(provider, NoOpProvider)
def test_should_return_no_op_provider_metadata(no_op_provider_client):
# Given
# When
metadata = NoOpProvider().get_metadata()
# Then
assert metadata is not None
assert metadata.name == "No-op Provider"
assert metadata.is_default_provider
def test_should_get_boolean_flag_from_no_op(no_op_provider_client):
# Given
# When