From f852dea9e565df23ecdc9de827c54e41000f08e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Fri, 3 Nov 2023 09:46:50 +0100 Subject: [PATCH] Removes state manager from all service instances that have no filename set or are not exposed --- src/pydase/data_service/abstract_data_service.py | 2 +- src/pydase/data_service/data_service.py | 6 ++++-- src/pydase/server/server.py | 4 ++++ src/pydase/server/web_server.py | 8 ++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/pydase/data_service/abstract_data_service.py b/src/pydase/data_service/abstract_data_service.py index 4a5d59b..f235275 100644 --- a/src/pydase/data_service/abstract_data_service.py +++ b/src/pydase/data_service/abstract_data_service.py @@ -14,6 +14,6 @@ class AbstractDataService(ABC): __root__: DataService _task_manager: TaskManager _callback_manager: CallbackManager - _state_manager: StateManager + _state_manager: Optional[StateManager] _autostart_tasks: dict[str, tuple[Any]] _filename: Optional[str] diff --git a/src/pydase/data_service/data_service.py b/src/pydase/data_service/data_service.py index a4dcea4..1d4ae66 100644 --- a/src/pydase/data_service/data_service.py +++ b/src/pydase/data_service/data_service.py @@ -43,7 +43,7 @@ class DataService(rpyc.Service, AbstractDataService): self._filename: Optional[str] = filename self._callback_manager: CallbackManager = CallbackManager(self) self._task_manager = TaskManager(self) - self._state_manager = StateManager(self) + self._state_manager: Optional[StateManager] = None if not hasattr(self, "_autostart_tasks"): self._autostart_tasks = {} @@ -56,7 +56,9 @@ class DataService(rpyc.Service, AbstractDataService): self.__check_instance_classes() self._initialised = True - self._state_manager.load_state() + if self._filename is not None: + self._state_manager = StateManager(self) + self._state_manager.load_state() def __setattr__(self, __name: str, __value: Any) -> None: # converting attributes that are not properties diff --git a/src/pydase/server/server.py b/src/pydase/server/server.py index e2ce365..b7cdfe0 100644 --- a/src/pydase/server/server.py +++ b/src/pydase/server/server.py @@ -17,6 +17,7 @@ from uvicorn.server import HANDLED_SIGNALS import pydase.units as u from pydase import DataService +from pydase.data_service.state_manager import StateManager from pydase.version import __version__ from .web_server import WebAPI @@ -163,6 +164,9 @@ class Server: **kwargs: Any, ) -> None: self._service = service + if self._service._state_manager is None: + self._service._state_manager = StateManager(self._service) + self._service._state_manager.load_state() self._host = host self._rpc_port = rpc_port self._web_port = web_port diff --git a/src/pydase/server/web_server.py b/src/pydase/server/web_server.py index 647d2c1..f80fc02 100644 --- a/src/pydase/server/web_server.py +++ b/src/pydase/server/web_server.py @@ -114,13 +114,17 @@ class WebAPI: @app.get("/service-properties") def service_properties() -> dict[str, Any]: - return self.service._state_manager.cache + if self.service._state_manager is not None: + return self.service._state_manager.cache + else: + logger.error("Exposed service does not have a state manager.") + return {} # exposing custom.css file provided by user if self.css is not None: @app.get("/custom.css") - async def styles(): + async def styles() -> FileResponse: return FileResponse(str(self.css)) app.mount(