Removes state manager from all service instances that have no filename set or are not exposed

This commit is contained in:
Mose Müller 2023-11-03 09:46:50 +01:00
parent 49070a7f38
commit f852dea9e5
4 changed files with 15 additions and 5 deletions

View File

@ -14,6 +14,6 @@ class AbstractDataService(ABC):
__root__: DataService __root__: DataService
_task_manager: TaskManager _task_manager: TaskManager
_callback_manager: CallbackManager _callback_manager: CallbackManager
_state_manager: StateManager _state_manager: Optional[StateManager]
_autostart_tasks: dict[str, tuple[Any]] _autostart_tasks: dict[str, tuple[Any]]
_filename: Optional[str] _filename: Optional[str]

View File

@ -43,7 +43,7 @@ class DataService(rpyc.Service, AbstractDataService):
self._filename: Optional[str] = filename self._filename: Optional[str] = filename
self._callback_manager: CallbackManager = CallbackManager(self) self._callback_manager: CallbackManager = CallbackManager(self)
self._task_manager = TaskManager(self) self._task_manager = TaskManager(self)
self._state_manager = StateManager(self) self._state_manager: Optional[StateManager] = None
if not hasattr(self, "_autostart_tasks"): if not hasattr(self, "_autostart_tasks"):
self._autostart_tasks = {} self._autostart_tasks = {}
@ -56,6 +56,8 @@ class DataService(rpyc.Service, AbstractDataService):
self.__check_instance_classes() self.__check_instance_classes()
self._initialised = True self._initialised = True
if self._filename is not None:
self._state_manager = StateManager(self)
self._state_manager.load_state() self._state_manager.load_state()
def __setattr__(self, __name: str, __value: Any) -> None: def __setattr__(self, __name: str, __value: Any) -> None:

View File

@ -17,6 +17,7 @@ from uvicorn.server import HANDLED_SIGNALS
import pydase.units as u import pydase.units as u
from pydase import DataService from pydase import DataService
from pydase.data_service.state_manager import StateManager
from pydase.version import __version__ from pydase.version import __version__
from .web_server import WebAPI from .web_server import WebAPI
@ -163,6 +164,9 @@ class Server:
**kwargs: Any, **kwargs: Any,
) -> None: ) -> None:
self._service = service 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._host = host
self._rpc_port = rpc_port self._rpc_port = rpc_port
self._web_port = web_port self._web_port = web_port

View File

@ -114,13 +114,17 @@ class WebAPI:
@app.get("/service-properties") @app.get("/service-properties")
def service_properties() -> dict[str, Any]: def service_properties() -> dict[str, Any]:
if self.service._state_manager is not None:
return self.service._state_manager.cache 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 # exposing custom.css file provided by user
if self.css is not None: if self.css is not None:
@app.get("/custom.css") @app.get("/custom.css")
async def styles(): async def styles() -> FileResponse:
return FileResponse(str(self.css)) return FileResponse(str(self.css))
app.mount( app.mount(