From cefd57d8d70c68fb9bce6b91dbbd5be113e944e7 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Sun, 6 Jul 2025 15:35:02 -0400 Subject: [PATCH] made live reloading optional --- src/zona/server.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/zona/server.py b/src/zona/server.py index d69161a..cdd0254 100644 --- a/src/zona/server.py +++ b/src/zona/server.py @@ -129,11 +129,11 @@ class ZonaReloadHandler(FileSystemEventHandler): self, builder: ZonaBuilder, output: Path, - ws_server: WebSocketServer, + ws_server: WebSocketServer | None, ): self.builder: ZonaBuilder = builder self.output: Path = output.resolve() - self.ws_server: WebSocketServer = ws_server + self.ws_server: WebSocketServer | None = ws_server def _trigger_rebuild(self, event: FileSystemEvent): # check if it's an event we care about @@ -141,9 +141,9 @@ class ZonaReloadHandler(FileSystemEventHandler): logger.info(f"Modified: {event.src_path}, rebuilding...") # rebuild static site self.builder.build() - assert self.ws_server - # trigger browser refresh - self.ws_server.notify_all() + if self.ws_server: + # trigger browser refresh + self.ws_server.notify_all() def _should_ignore(self, event: FileSystemEvent) -> bool: path = Path(str(event.src_path)).resolve() @@ -170,6 +170,7 @@ def serve( draft: bool = False, host: str = "localhost", port: int = 8000, + live_reload: bool = True, ): """Serve preview website with live reload and automatic rebuild.""" builder = ZonaBuilder(root, output, draft) @@ -182,21 +183,26 @@ def serve( root = builder.layout.root # spin up websocket server for live reloading - ws_port = port + 1 - ws_server = WebSocketServer(host, ws_port) - ws_server.start() - # generate reload script for injection - reload_script = make_reload_script(host, ws_port) + if live_reload: + ws_port = port + 1 + ws_server = WebSocketServer(host, ws_port) + ws_server.start() + # generate reload script for injection + reload_script = make_reload_script(host, ws_port) + # generate handler with reload script as attribute + handler = make_handler_class(reload_script) + else: + handler = QuietHandler + ws_server = None # serve the output directory os.chdir(output) - # generate handler with reload script as attribute - handler = make_handler_class(reload_script) # initialize http server httpd = ZonaServer( server_address=(host, port), RequestHandlerClass=handler ) # link websocket server - httpd.set_ws_server(ws_server) + if ws_server: + httpd.set_ws_server(ws_server) # provide link to user print(f"Serving {output} at http://{host}:{port}") print("Exit with ")