feat: implement client get_metadata for requirement 1.2.2 (#141)

Signed-off-by: Federico Bond <federicobond@gmail.com>
This commit is contained in:
Federico Bond 2023-07-10 12:32:59 -03:00 committed by GitHub
parent 292a0dfc0b
commit 571f5eb3bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -1,5 +1,6 @@
import logging
import typing
from dataclasses import dataclass
from open_feature.evaluation_context.evaluation_context import EvaluationContext
from open_feature.exception.error_code import ErrorCode
@ -45,6 +46,11 @@ GetDetailCallable = typing.Union[
]
@dataclass
class ClientMetadata:
name: str
class OpenFeatureClient:
def __init__(
self,
@ -60,6 +66,9 @@ class OpenFeatureClient:
self.hooks = hooks or []
self.provider = provider
def get_metadata(self):
return ClientMetadata(name=self.name)
def add_hooks(self, hooks: typing.List[Hook]):
self.hooks = self.hooks + hooks

View File

@ -6,6 +6,8 @@ from open_feature.exception.error_code import ErrorCode
from open_feature.exception.exceptions import OpenFeatureError
from open_feature.flag_evaluation.reason import Reason
from open_feature.hooks.hook import Hook
from open_feature.open_feature_client import OpenFeatureClient
from open_feature.provider.no_op_provider import NoOpProvider
@pytest.mark.parametrize(
@ -132,3 +134,13 @@ def test_should_handle_an_open_feature_exception_thrown_by_a_provider(
assert isinstance(flag_details.value, bool)
assert flag_details.reason == Reason.ERROR.value
assert flag_details.error_message == "error_message"
def test_should_return_client_metadata_with_name():
# Given
client = OpenFeatureClient("my-client", None, NoOpProvider())
# When
metadata = client.get_metadata()
# Then
assert metadata is not None
assert metadata.name == "my-client"