From 817afc610a998573dc61fa42e13ab29a589696d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Mon, 29 Jul 2024 13:49:12 +0200 Subject: [PATCH] StateManager: replaces _data_service_cache with cache_manager - _data_service_cache -> cache_manager - removes cache property - replaces get_nested_dict_by_path with cache_manager.get_value_dict_from_cache where possible --- .../data_service/data_service_observer.py | 6 ++--- src/pydase/data_service/state_manager.py | 23 +++++++------------ src/pydase/server/web_server/sio_setup.py | 6 ++--- src/pydase/server/web_server/web_server.py | 2 +- tests/data_service/test_data_service_cache.py | 16 +++++-------- 5 files changed, 20 insertions(+), 33 deletions(-) diff --git a/src/pydase/data_service/data_service_observer.py b/src/pydase/data_service/data_service_observer.py index ca74dc6..958c930 100644 --- a/src/pydase/data_service/data_service_observer.py +++ b/src/pydase/data_service/data_service_observer.py @@ -37,7 +37,7 @@ class DataServiceObserver(PropertyObserver): try: cached_value_dict = deepcopy( - self.state_manager._data_service_cache.get_value_dict_from_cache( + self.state_manager.cache_manager.get_value_dict_from_cache( full_access_path ) ) @@ -60,7 +60,7 @@ class DataServiceObserver(PropertyObserver): self._update_cache_value(full_access_path, value, cached_value_dict) cached_value_dict = deepcopy( - self.state_manager._data_service_cache.get_value_dict_from_cache( + self.state_manager.cache_manager.get_value_dict_from_cache( full_access_path ) ) @@ -93,7 +93,7 @@ class DataServiceObserver(PropertyObserver): value_dict["type"], cached_value_dict["type"], ) - self.state_manager._data_service_cache.update_cache( + self.state_manager.cache_manager.update_cache( full_access_path, value, ) diff --git a/src/pydase/data_service/state_manager.py b/src/pydase/data_service/state_manager.py index 5891b6d..f7d69d7 100644 --- a/src/pydase/data_service/state_manager.py +++ b/src/pydase/data_service/state_manager.py @@ -113,19 +113,12 @@ class StateManager: self.filename = filename self.service = service - self._data_service_cache = DataServiceCache(self.service) - - @property - def cache(self) -> SerializedObject: - """Returns the cached DataService state.""" - return self._data_service_cache.cache + self.cache_manager = DataServiceCache(self.service) @property def cache_value(self) -> dict[str, SerializedObject]: """Returns the "value" value of the DataService serialization.""" - return cast( - dict[str, SerializedObject], self._data_service_cache.cache["value"] - ) + return cast(dict[str, SerializedObject], self.cache_manager.cache["value"]) def save_state(self) -> None: """ @@ -158,8 +151,8 @@ class StateManager: if self.__is_loadable_state_attribute(path): nested_json_dict = get_nested_dict_by_path(json_dict, path) try: - nested_class_dict = ( - self._data_service_cache.get_value_dict_from_cache(path) + nested_class_dict = self.cache_manager.get_value_dict_from_cache( + path ) except (SerializationPathError, KeyError): nested_class_dict = { @@ -211,7 +204,7 @@ class StateManager: value: The new value to set for the attribute. """ - current_value_dict = get_nested_dict_by_path(self.cache_value, path) + current_value_dict = self.cache_manager.get_value_dict_from_cache(path) # This will also filter out methods as they are 'read-only' if current_value_dict["readonly"]: @@ -249,7 +242,7 @@ class StateManager: path_parts = parse_full_access_path(path) target_obj = get_object_by_path_parts(self.service, path_parts[:-1]) - attr_cache_type = get_nested_dict_by_path(self.cache_value, path)["type"] + attr_cache_type = self.cache_manager.get_value_dict_from_cache(path)["type"] # De-serialize the value if attr_cache_type in ("ColouredEnum", "Enum"): @@ -296,8 +289,8 @@ class StateManager: return has_decorator try: - cached_serialization_dict = get_nested_dict_by_path( - self.cache_value, full_access_path + cached_serialization_dict = self.cache_manager.get_value_dict_from_cache( + full_access_path ) if cached_serialization_dict["value"] == "method": diff --git a/src/pydase/server/web_server/sio_setup.py b/src/pydase/server/web_server/sio_setup.py index 0cc4505..aa160f4 100644 --- a/src/pydase/server/web_server/sio_setup.py +++ b/src/pydase/server/web_server/sio_setup.py @@ -134,7 +134,7 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) -> "Client [%s] requested service serialization", click.style(str(sid), fg="cyan"), ) - return state_manager.cache + return state_manager.cache_manager.cache @sio.event async def update_value(sid: str, data: UpdateDict) -> SerializedObject | None: # type: ignore @@ -151,9 +151,7 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) -> @sio.event async def get_value(sid: str, access_path: str) -> SerializedObject: try: - return state_manager._data_service_cache.get_value_dict_from_cache( - access_path - ) + return state_manager.cache_manager.get_value_dict_from_cache(access_path) except Exception as e: logger.exception(e) return dump(e) diff --git a/src/pydase/server/web_server/web_server.py b/src/pydase/server/web_server/web_server.py index 3fc1084..1dd6c96 100644 --- a/src/pydase/server/web_server/web_server.py +++ b/src/pydase/server/web_server/web_server.py @@ -123,7 +123,7 @@ class WebServer: self, request: aiohttp.web.Request, ) -> aiohttp.web.Response: - return aiohttp.web.json_response(self.state_manager.cache) + return aiohttp.web.json_response(self.state_manager.cache_manager.cache) async def _web_settings_route( self, diff --git a/tests/data_service/test_data_service_cache.py b/tests/data_service/test_data_service_cache.py index 00f943d..8bb734a 100644 --- a/tests/data_service/test_data_service_cache.py +++ b/tests/data_service/test_data_service_cache.py @@ -22,13 +22,13 @@ def test_nested_attributes_cache_callback() -> None: service_instance.name = "Peepz" assert ( - state_manager._data_service_cache.get_value_dict_from_cache("name")["value"] + state_manager.cache_manager.get_value_dict_from_cache("name")["value"] == "Peepz" ) service_instance.class_attr.name = "Ciao" assert ( - state_manager._data_service_cache.get_value_dict_from_cache("class_attr.name")[ + state_manager.cache_manager.get_value_dict_from_cache("class_attr.name")[ "value" ] == "Ciao" @@ -48,24 +48,20 @@ async def test_task_status_update() -> None: DataServiceObserver(state_manager) assert ( - state_manager._data_service_cache.get_value_dict_from_cache("my_method")["type"] + state_manager.cache_manager.get_value_dict_from_cache("my_method")["type"] == "method" ) assert ( - state_manager._data_service_cache.get_value_dict_from_cache("my_method")[ - "value" - ] + state_manager.cache_manager.get_value_dict_from_cache("my_method")["value"] is None ) service_instance.start_my_method() # type: ignore assert ( - state_manager._data_service_cache.get_value_dict_from_cache("my_method")["type"] + state_manager.cache_manager.get_value_dict_from_cache("my_method")["type"] == "method" ) assert ( - state_manager._data_service_cache.get_value_dict_from_cache("my_method")[ - "value" - ] + state_manager.cache_manager.get_value_dict_from_cache("my_method")["value"] == "RUNNING" )