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
_task_manager: TaskManager
_callback_manager: CallbackManager
_state_manager: StateManager
_state_manager: Optional[StateManager]
_autostart_tasks: dict[str, tuple[Any]]
_filename: Optional[str]

View File

@ -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

View File

@ -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

View File

@ -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(