Skip to content
This repository was archived by the owner on Nov 8, 2024. It is now read-only.

Commit 3df780d

Browse files
committed
feat: allow setting bandits initial configuration
1 parent 6840c33 commit 3df780d

File tree

6 files changed

+28
-5
lines changed

6 files changed

+28
-5
lines changed

eppo_client/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def init(config: Config) -> EppoClient:
4040
flag_config_store.set_configurations(
4141
config.initial_configuration._flags_configuration.flags
4242
)
43+
if config.initial_configuration._bandits_configuration:
44+
bandit_config_store.set_configurations(
45+
config.initial_configuration._bandits_configuration.bandits
46+
)
4347

4448
config_requestor = ExperimentConfigurationRequestor(
4549
http_client=http_client,

eppo_client/configuration.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from eppo_client.models import UfcResponse
1+
from typing import Union
2+
from eppo_client.models import UfcResponse, BanditResponse
23

34

45
class Configuration:
@@ -7,5 +8,15 @@ class Configuration:
78
interpret feature flags.
89
"""
910

10-
def __init__(self, flags_configuration: str):
11+
def __init__(
12+
self,
13+
flags_configuration: Union[bytes, str],
14+
bandits_configuration: Union[bytes, str, None] = None,
15+
) -> None:
1116
self._flags_configuration = UfcResponse.model_validate_json(flags_configuration)
17+
18+
self._bandits_configuration = None
19+
if bandits_configuration is not None:
20+
self._bandits_configuration = BanditResponse.model_validate_json(
21+
bandits_configuration
22+
)

eppo_client/configuration_requestor.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,7 @@ def _set_configuration(self, configuration: Configuration):
8080
self.__flag_config_store.set_configurations(
8181
configuration._flags_configuration.flags
8282
)
83+
if configuration._bandits_configuration is not None:
84+
self.__bandit_config_store.set_configurations(
85+
configuration._bandits_configuration.bandits
86+
)

eppo_client/configuration_store.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
class ConfigurationStore(Generic[T]):
9-
def __init__(self):
9+
def __init__(self) -> None:
1010
self.__is_initialized = False
1111
self.__cache: Dict[str, T] = {}
1212
self.__lock = ReadWriteLock()

eppo_client/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,7 @@ class BanditData(SdkBaseModel):
105105
bandit_model_version: str = Field(alias="modelVersion")
106106
bandit_model_data: BanditModelData = Field(alias="modelData")
107107
updated_at: datetime
108+
109+
110+
class BanditResponse(SdkBaseModel):
111+
bandits: Dict[str, BanditData]

test/configuration_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77
def test_init_valid():
8-
Configuration(flags_configuration='{"flags": {}}')
8+
Configuration(flags_configuration=b'{"flags": {}}')
99

1010

1111
def test_init_invalid_json():
@@ -15,4 +15,4 @@ def test_init_invalid_json():
1515

1616
def test_init_invalid_format():
1717
with pytest.raises(pydantic.ValidationError):
18-
Configuration(flags_configuration='{"flags": []}')
18+
Configuration(flags_configuration=b'{"flags": []}')

0 commit comments

Comments
 (0)