From dd1cc3bc3186dab1e27d8631a213fd65cc27b3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Wed, 2 Aug 2023 12:06:21 +0200 Subject: [PATCH] feat: wrapping main loop in try except block This ensures that - the shutdown coroutine will be saved to close all resources gracefully - the service state is being saved when some unexpected error happens --- src/pyDataInterface/server/server.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pyDataInterface/server/server.py b/src/pyDataInterface/server/server.py index 054fc1c..5518b2a 100644 --- a/src/pyDataInterface/server/server.py +++ b/src/pyDataInterface/server/server.py @@ -23,7 +23,7 @@ from .web_server import WebAPI try: import tiqi_rpc except ImportError: - logger.debug("tiqi_rpc is not installed. tiqi_rpc. Server will not be exposed.") + logger.debug("tiqi_rpc is not installed. tiqi_rpc server will not be exposed.") tiqi_rpc = None # type: ignore @@ -76,7 +76,11 @@ class Server: except RuntimeError: self._loop = asyncio.new_event_loop() asyncio.set_event_loop(self._loop) - self._loop.run_until_complete(self.serve()) + try: + self._loop.run_until_complete(self.serve()) + except Exception: + self._loop.run_until_complete(self.shutdown()) + raise async def serve(self) -> None: process_id = os.getpid() @@ -174,7 +178,8 @@ class Server: logger.info("Shutting down") logger.info(f"Saving data to {self._service._filename}.") - self._service.write_to_file() + if self._service._filename is not None: + self._service.write_to_file() await self.__cancel_servers() await self.__cancel_tasks()