From ad0f9420d95db8d755f22bd21cf30758053a0941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Mon, 29 Jul 2024 13:29:47 +0200 Subject: [PATCH] get_value_dict_from_cache does not catch exceptions any more --- src/pydase/data_service/data_service_cache.py | 18 +++---------- .../data_service/data_service_observer.py | 26 ++++++++++++++----- src/pydase/data_service/state_manager.py | 15 ++++++++--- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/pydase/data_service/data_service_cache.py b/src/pydase/data_service/data_service_cache.py index 1134d66..66b94df 100644 --- a/src/pydase/data_service/data_service_cache.py +++ b/src/pydase/data_service/data_service_cache.py @@ -2,7 +2,6 @@ import logging from typing import TYPE_CHECKING, Any, cast from pydase.utils.serialization.serializer import ( - SerializationPathError, SerializedObject, get_nested_dict_by_path, set_nested_value_by_path, @@ -37,16 +36,7 @@ class DataServiceCache: ) def get_value_dict_from_cache(self, full_access_path: str) -> SerializedObject: - try: - return get_nested_dict_by_path( - cast(dict[str, SerializedObject], self._cache["value"]), - full_access_path, - ) - except (SerializationPathError, KeyError): - return { - "full_access_path": full_access_path, - "value": None, - "type": "None", - "doc": None, - "readonly": False, - } + return get_nested_dict_by_path( + cast(dict[str, SerializedObject], self._cache["value"]), + full_access_path, + ) diff --git a/src/pydase/data_service/data_service_observer.py b/src/pydase/data_service/data_service_observer.py index febd157..ca74dc6 100644 --- a/src/pydase/data_service/data_service_observer.py +++ b/src/pydase/data_service/data_service_observer.py @@ -9,7 +9,11 @@ from pydase.observer_pattern.observer.property_observer import ( PropertyObserver, ) from pydase.utils.helpers import get_object_attr_from_path -from pydase.utils.serialization.serializer import SerializedObject, dump +from pydase.utils.serialization.serializer import ( + SerializationPathError, + SerializedObject, + dump, +) logger = logging.getLogger(__name__) @@ -29,17 +33,27 @@ class DataServiceObserver(PropertyObserver): for changing_attribute in self.changing_attributes ): return + cached_value_dict: SerializedObject - cached_value_dict = deepcopy( - self.state_manager._data_service_cache.get_value_dict_from_cache( - full_access_path + try: + cached_value_dict = deepcopy( + self.state_manager._data_service_cache.get_value_dict_from_cache( + full_access_path + ) ) - ) + except (SerializationPathError, KeyError): + cached_value_dict = { + "full_access_path": full_access_path, + "value": None, + "type": "None", + "doc": None, + "readonly": False, + } cached_value = cached_value_dict.get("value") if ( all(part[0] != "_" for part in full_access_path.split(".")) - and cached_value != dump(value)["value"] + and cached_value != value ): logger.debug("'%s' changed to '%s'", full_access_path, value) diff --git a/src/pydase/data_service/state_manager.py b/src/pydase/data_service/state_manager.py index 98c58ed..5891b6d 100644 --- a/src/pydase/data_service/state_manager.py +++ b/src/pydase/data_service/state_manager.py @@ -157,9 +157,18 @@ class StateManager: for path in generate_serialized_data_paths(json_dict): if self.__is_loadable_state_attribute(path): nested_json_dict = get_nested_dict_by_path(json_dict, path) - nested_class_dict = self._data_service_cache.get_value_dict_from_cache( - path - ) + try: + nested_class_dict = ( + self._data_service_cache.get_value_dict_from_cache(path) + ) + except (SerializationPathError, KeyError): + nested_class_dict = { + "full_access_path": path, + "value": None, + "type": "None", + "doc": None, + "readonly": False, + } value_type = nested_json_dict["type"] class_attr_value_type = nested_class_dict.get("type", None)