made live reloading optional
This commit is contained in:
parent
a03e9bfb82
commit
cefd57d8d7
1 changed files with 19 additions and 13 deletions
|
@ -129,11 +129,11 @@ class ZonaReloadHandler(FileSystemEventHandler):
|
||||||
self,
|
self,
|
||||||
builder: ZonaBuilder,
|
builder: ZonaBuilder,
|
||||||
output: Path,
|
output: Path,
|
||||||
ws_server: WebSocketServer,
|
ws_server: WebSocketServer | None,
|
||||||
):
|
):
|
||||||
self.builder: ZonaBuilder = builder
|
self.builder: ZonaBuilder = builder
|
||||||
self.output: Path = output.resolve()
|
self.output: Path = output.resolve()
|
||||||
self.ws_server: WebSocketServer = ws_server
|
self.ws_server: WebSocketServer | None = ws_server
|
||||||
|
|
||||||
def _trigger_rebuild(self, event: FileSystemEvent):
|
def _trigger_rebuild(self, event: FileSystemEvent):
|
||||||
# check if it's an event we care about
|
# check if it's an event we care about
|
||||||
|
@ -141,7 +141,7 @@ class ZonaReloadHandler(FileSystemEventHandler):
|
||||||
logger.info(f"Modified: {event.src_path}, rebuilding...")
|
logger.info(f"Modified: {event.src_path}, rebuilding...")
|
||||||
# rebuild static site
|
# rebuild static site
|
||||||
self.builder.build()
|
self.builder.build()
|
||||||
assert self.ws_server
|
if self.ws_server:
|
||||||
# trigger browser refresh
|
# trigger browser refresh
|
||||||
self.ws_server.notify_all()
|
self.ws_server.notify_all()
|
||||||
|
|
||||||
|
@ -170,6 +170,7 @@ def serve(
|
||||||
draft: bool = False,
|
draft: bool = False,
|
||||||
host: str = "localhost",
|
host: str = "localhost",
|
||||||
port: int = 8000,
|
port: int = 8000,
|
||||||
|
live_reload: bool = True,
|
||||||
):
|
):
|
||||||
"""Serve preview website with live reload and automatic rebuild."""
|
"""Serve preview website with live reload and automatic rebuild."""
|
||||||
builder = ZonaBuilder(root, output, draft)
|
builder = ZonaBuilder(root, output, draft)
|
||||||
|
@ -182,20 +183,25 @@ def serve(
|
||||||
root = builder.layout.root
|
root = builder.layout.root
|
||||||
|
|
||||||
# spin up websocket server for live reloading
|
# spin up websocket server for live reloading
|
||||||
|
if live_reload:
|
||||||
ws_port = port + 1
|
ws_port = port + 1
|
||||||
ws_server = WebSocketServer(host, ws_port)
|
ws_server = WebSocketServer(host, ws_port)
|
||||||
ws_server.start()
|
ws_server.start()
|
||||||
# generate reload script for injection
|
# generate reload script for injection
|
||||||
reload_script = make_reload_script(host, ws_port)
|
reload_script = make_reload_script(host, ws_port)
|
||||||
# serve the output directory
|
|
||||||
os.chdir(output)
|
|
||||||
# generate handler with reload script as attribute
|
# generate handler with reload script as attribute
|
||||||
handler = make_handler_class(reload_script)
|
handler = make_handler_class(reload_script)
|
||||||
|
else:
|
||||||
|
handler = QuietHandler
|
||||||
|
ws_server = None
|
||||||
|
# serve the output directory
|
||||||
|
os.chdir(output)
|
||||||
# initialize http server
|
# initialize http server
|
||||||
httpd = ZonaServer(
|
httpd = ZonaServer(
|
||||||
server_address=(host, port), RequestHandlerClass=handler
|
server_address=(host, port), RequestHandlerClass=handler
|
||||||
)
|
)
|
||||||
# link websocket server
|
# link websocket server
|
||||||
|
if ws_server:
|
||||||
httpd.set_ws_server(ws_server)
|
httpd.set_ws_server(ws_server)
|
||||||
# provide link to user
|
# provide link to user
|
||||||
print(f"Serving {output} at http://{host}:{port}")
|
print(f"Serving {output} at http://{host}:{port}")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue