if dev_mode or log_level == "DEBUG":
loop.set_debug(True)
loop.set_exception_handler(_global_loop_exception_handler)
- await mass.start()
+ try:
+ await mass.start()
+ except Exception:
+ # exit immediately if startup fails
+ loop.stop()
+ raise
run(
start_mass(),
"""Cleanup on exit."""
if self._sync_task and not self._sync_task.done():
self._sync_task.cancel()
- await self.database.close()
+ if self.database:
+ await self.database.close()
@property
def providers(self) -> list[MusicProvider]:
async def close(self) -> None:
"""Cleanup on exit."""
# stop/clean webserver
- await self._tcp_site.stop()
- await self._apprunner.cleanup()
- await self._webapp.shutdown()
- await self._webapp.cleanup()
+ if self._tcp_site:
+ await self._tcp_site.stop()
+ if self._apprunner:
+ await self._apprunner.cleanup()
+ if self._webapp:
+ await self._webapp.shutdown()
+ await self._webapp.cleanup()
@property
def base_url(self):
msg = "Dynamic routes are not enabled"
raise RuntimeError(msg)
key = f"{method}.{path}"
- self._dynamic_routes.pop(key)
+ self._dynamic_routes.pop(key, None)
async def serve_static(self, file_path: str, request: web.Request) -> web.FileResponse:
"""Serve file response."""