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
This commit is contained in:
Mose Müller 2024-07-29 13:49:12 +02:00
parent ad0f9420d9
commit 817afc610a
5 changed files with 20 additions and 33 deletions

View File

@ -37,7 +37,7 @@ class DataServiceObserver(PropertyObserver):
try: try:
cached_value_dict = deepcopy( 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 full_access_path
) )
) )
@ -60,7 +60,7 @@ class DataServiceObserver(PropertyObserver):
self._update_cache_value(full_access_path, value, cached_value_dict) self._update_cache_value(full_access_path, value, cached_value_dict)
cached_value_dict = deepcopy( 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 full_access_path
) )
) )
@ -93,7 +93,7 @@ class DataServiceObserver(PropertyObserver):
value_dict["type"], value_dict["type"],
cached_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, full_access_path,
value, value,
) )

View File

@ -113,19 +113,12 @@ class StateManager:
self.filename = filename self.filename = filename
self.service = service self.service = service
self._data_service_cache = DataServiceCache(self.service) self.cache_manager = DataServiceCache(self.service)
@property
def cache(self) -> SerializedObject:
"""Returns the cached DataService state."""
return self._data_service_cache.cache
@property @property
def cache_value(self) -> dict[str, SerializedObject]: def cache_value(self) -> dict[str, SerializedObject]:
"""Returns the "value" value of the DataService serialization.""" """Returns the "value" value of the DataService serialization."""
return cast( return cast(dict[str, SerializedObject], self.cache_manager.cache["value"])
dict[str, SerializedObject], self._data_service_cache.cache["value"]
)
def save_state(self) -> None: def save_state(self) -> None:
""" """
@ -158,8 +151,8 @@ class StateManager:
if self.__is_loadable_state_attribute(path): if self.__is_loadable_state_attribute(path):
nested_json_dict = get_nested_dict_by_path(json_dict, path) nested_json_dict = get_nested_dict_by_path(json_dict, path)
try: try:
nested_class_dict = ( nested_class_dict = self.cache_manager.get_value_dict_from_cache(
self._data_service_cache.get_value_dict_from_cache(path) path
) )
except (SerializationPathError, KeyError): except (SerializationPathError, KeyError):
nested_class_dict = { nested_class_dict = {
@ -211,7 +204,7 @@ class StateManager:
value: The new value to set for the attribute. 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' # This will also filter out methods as they are 'read-only'
if current_value_dict["readonly"]: if current_value_dict["readonly"]:
@ -249,7 +242,7 @@ class StateManager:
path_parts = parse_full_access_path(path) path_parts = parse_full_access_path(path)
target_obj = get_object_by_path_parts(self.service, path_parts[:-1]) 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 # De-serialize the value
if attr_cache_type in ("ColouredEnum", "Enum"): if attr_cache_type in ("ColouredEnum", "Enum"):
@ -296,8 +289,8 @@ class StateManager:
return has_decorator return has_decorator
try: try:
cached_serialization_dict = get_nested_dict_by_path( cached_serialization_dict = self.cache_manager.get_value_dict_from_cache(
self.cache_value, full_access_path full_access_path
) )
if cached_serialization_dict["value"] == "method": if cached_serialization_dict["value"] == "method":

View File

@ -134,7 +134,7 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) ->
"Client [%s] requested service serialization", "Client [%s] requested service serialization",
click.style(str(sid), fg="cyan"), click.style(str(sid), fg="cyan"),
) )
return state_manager.cache return state_manager.cache_manager.cache
@sio.event @sio.event
async def update_value(sid: str, data: UpdateDict) -> SerializedObject | None: # type: ignore 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 @sio.event
async def get_value(sid: str, access_path: str) -> SerializedObject: async def get_value(sid: str, access_path: str) -> SerializedObject:
try: try:
return state_manager._data_service_cache.get_value_dict_from_cache( return state_manager.cache_manager.get_value_dict_from_cache(access_path)
access_path
)
except Exception as e: except Exception as e:
logger.exception(e) logger.exception(e)
return dump(e) return dump(e)

View File

@ -123,7 +123,7 @@ class WebServer:
self, self,
request: aiohttp.web.Request, request: aiohttp.web.Request,
) -> aiohttp.web.Response: ) -> 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( async def _web_settings_route(
self, self,

View File

@ -22,13 +22,13 @@ def test_nested_attributes_cache_callback() -> None:
service_instance.name = "Peepz" service_instance.name = "Peepz"
assert ( 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" == "Peepz"
) )
service_instance.class_attr.name = "Ciao" service_instance.class_attr.name = "Ciao"
assert ( 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" "value"
] ]
== "Ciao" == "Ciao"
@ -48,24 +48,20 @@ async def test_task_status_update() -> None:
DataServiceObserver(state_manager) DataServiceObserver(state_manager)
assert ( 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" == "method"
) )
assert ( assert (
state_manager._data_service_cache.get_value_dict_from_cache("my_method")[ state_manager.cache_manager.get_value_dict_from_cache("my_method")["value"]
"value"
]
is None is None
) )
service_instance.start_my_method() # type: ignore service_instance.start_my_method() # type: ignore
assert ( 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" == "method"
) )
assert ( assert (
state_manager._data_service_cache.get_value_dict_from_cache("my_method")[ state_manager.cache_manager.get_value_dict_from_cache("my_method")["value"]
"value"
]
== "RUNNING" == "RUNNING"
) )