diff --git a/featureflags_client/http/flags.py b/featureflags_client/http/flags.py index cfb46b1..1e09447 100644 --- a/featureflags_client/http/flags.py +++ b/featureflags_client/http/flags.py @@ -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 diff --git a/featureflags_client/http/managers/base.py b/featureflags_client/http/managers/base.py index 195197b..281be27 100644 --- a/featureflags_client/http/managers/base.py +++ b/featureflags_client/http/managers/base.py @@ -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( @@ -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 """ diff --git a/featureflags_client/http/state.py b/featureflags_client/http/state.py index 72a5b67..76f2de3 100644 --- a/featureflags_client/http/state.py +++ b/featureflags_client/http/state.py @@ -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, @@ -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( @@ -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 diff --git a/featureflags_client/http/values.py b/featureflags_client/http/values.py index 6ed0934..b326d86 100644 --- a/featureflags_client/http/values.py +++ b/featureflags_client/http/values.py @@ -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