Skip to content

Commit

Permalink
split flags and value states
Browse files Browse the repository at this point in the history
  • Loading branch information
d.maximchuk committed Sep 4, 2024
1 parent 370833b commit 128467b
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 16 deletions.
2 changes: 1 addition & 1 deletion featureflags_client/http/flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def __getattr__(self, name: str) -> bool:

value = self._overrides.get(name)
if value is None:
check = self._manager.get(name)
check = self._manager.get_flag(name)
value = check(self._ctx) if check is not None else default

# caching/snapshotting
Expand Down
19 changes: 13 additions & 6 deletions featureflags_client/http/managers/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,15 @@ def _check_sync(self) -> None:
self._next_sync,
)

def get(
def get_flag(self, name: str) -> Optional[Callable[[Dict], bool]]:
self._check_sync()
return self._state.get_flag(name)

def get_value(
self, name: str
) -> Optional[Callable[[Dict], Union[bool, int, str]]]:
) -> Optional[Callable[[Dict], Union[int, str]]]:
self._check_sync()
return self._state.get(name)
return self._state.get_value(name)

def preload(self) -> None:
payload = PreloadFlagsRequest(
Expand Down Expand Up @@ -211,10 +215,13 @@ async def _post( # type: ignore
async def close(self) -> None:
pass

def get(
def get_flag(self, name: str) -> Optional[Callable[[Dict], bool]]:
return self._state.get_flag(name)

def get_value(
self, name: str
) -> Optional[Callable[[Dict], Union[bool, int, str]]]:
return self._state.get(name)
) -> Optional[Callable[[Dict], Union[int, str]]]:
return self._state.get_value(name)

async def preload(self) -> None: # type: ignore
"""
Expand Down
20 changes: 12 additions & 8 deletions featureflags_client/http/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ class BaseState(ABC):
project: str
version: int

_state: Dict[str, Callable[..., Union[bool, int, str]]]
_flags_state: Dict[str, Callable[..., bool]]
_values_state: Dict[str, Callable[..., Union[int, str]]]

def __init__(
self,
Expand All @@ -34,12 +35,16 @@ def __init__(
self.flags = flags
self.values = values

self._state = {}
self._flags_state = {}
self._values_state = {}

def get(
def get_flag(self, name: str) -> Optional[Callable[[Dict], bool]]:
return self._flags_state.get(name)

def get_value(
self, name: str
) -> Optional[Callable[[Dict], Union[bool, int, str]]]:
return self._state.get(name)
) -> Optional[Callable[[Dict], Union[int, str]]]:
return self._values_state.get(name)

@abstractmethod
def update(
Expand All @@ -59,7 +64,6 @@ def update(
version: int,
) -> None:
if self.version != version:
flags_state = update_flags_state(flags)
values_state = update_values_state(values)
self._state = {**flags_state, **values_state}
self._flags_state = update_flags_state(flags)
self._values_state = update_values_state(values)
self.version = version
2 changes: 1 addition & 1 deletion featureflags_client/http/values.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def __getattr__(self, name: str) -> Union[int, str]:

value = self._overrides.get(name)
if value is None:
check = self._manager.get(name)
check = self._manager.get_value(name)
value = check(self._ctx) if check is not None else default

# caching/snapshotting
Expand Down

0 comments on commit 128467b

Please sign in to comment.