fix: enable_web argument toggles the frontend now

- always initialise the WebServer (also if enable_web is False).
Otherwise, the socketio server will not be initialised
- passing the enable_web argument to the WebServer which is then used to
decide whether to add the frontend routes
This commit is contained in:
Mose Müller
2025-06-19 09:43:34 +02:00
parent cded80c8e5
commit ff1654e65c
2 changed files with 21 additions and 17 deletions

View File

@ -226,17 +226,17 @@ class Server:
server_task = self._loop.create_task(addin_server.serve()) server_task = self._loop.create_task(addin_server.serve())
server_task.add_done_callback(self._handle_server_shutdown) server_task.add_done_callback(self._handle_server_shutdown)
self.servers[server_name] = server_task self.servers[server_name] = server_task
if self._enable_web: self._web_server = WebServer(
self._web_server = WebServer( data_service_observer=self._observer,
data_service_observer=self._observer, host=self._host,
host=self._host, port=self._web_port,
port=self._web_port, enable_frontend=self._enable_web,
**self._kwargs, **self._kwargs,
) )
server_task = self._loop.create_task(self._web_server.serve()) server_task = self._loop.create_task(self._web_server.serve())
server_task.add_done_callback(self._handle_server_shutdown) server_task.add_done_callback(self._handle_server_shutdown)
self.servers["web"] = server_task self.servers["web"] = server_task
self._loop.create_task(self._state_manager.autosave()) self._loop.create_task(self._state_manager.autosave())

View File

@ -81,6 +81,7 @@ class WebServer:
host: str, host: str,
port: int, port: int,
*, *,
enable_frontend: bool = True,
css: str | Path | None = None, css: str | Path | None = None,
favicon_path: str | Path | None = None, favicon_path: str | Path | None = None,
enable_cors: bool = True, enable_cors: bool = True,
@ -97,6 +98,7 @@ class WebServer:
self.enable_cors = enable_cors self.enable_cors = enable_cors
self.frontend_src = frontend_src self.frontend_src = frontend_src
self.favicon_path: Path | str = favicon_path # type: ignore self.favicon_path: Path | str = favicon_path # type: ignore
self.enable_frontend = enable_frontend
if self.favicon_path is None: if self.favicon_path is None:
self.favicon_path = self.frontend_src / "favicon.ico" self.favicon_path = self.frontend_src / "favicon.ico"
@ -162,15 +164,17 @@ class WebServer:
# Define routes # Define routes
self._sio.attach(app, socketio_path="/ws/socket.io") self._sio.attach(app, socketio_path="/ws/socket.io")
app.router.add_static("/assets", self.frontend_src / "assets") if self.enable_frontend:
app.router.add_get("/favicon.ico", self._favicon_route) app.router.add_static("/assets", self.frontend_src / "assets")
app.router.add_get("/service-properties", self._service_properties_route) app.router.add_get("/favicon.ico", self._favicon_route)
app.router.add_get("/web-settings", self._web_settings_route) app.router.add_get("/service-properties", self._service_properties_route)
app.router.add_get("/custom.css", self._styles_route) app.router.add_get("/web-settings", self._web_settings_route)
app.router.add_get("/custom.css", self._styles_route)
app.add_subapp("/api/", create_api_application(self.state_manager)) app.add_subapp("/api/", create_api_application(self.state_manager))
app.router.add_get(r"/", index) if self.enable_frontend:
app.router.add_get(r"/{tail:.*}", index) app.router.add_get(r"/", index)
app.router.add_get(r"/{tail:.*}", index)
await aiohttp.web._run_app( await aiohttp.web._run_app(
app, app,