server now builds to tempdir by default
This commit is contained in:
parent
8793284bd6
commit
bdd7558999
2 changed files with 65 additions and 65 deletions
|
@ -59,9 +59,7 @@ def build(
|
||||||
"""
|
"""
|
||||||
if draft:
|
if draft:
|
||||||
print("Option override: including drafts.")
|
print("Option override: including drafts.")
|
||||||
builder = ZonaBuilder(
|
builder = ZonaBuilder(cli_root=root, cli_output=output, draft=draft)
|
||||||
cli_root=root, cli_output=output, draft=draft
|
|
||||||
)
|
|
||||||
builder.build()
|
builder.build()
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,9 +73,7 @@ def serve(
|
||||||
] = None,
|
] = None,
|
||||||
host: Annotated[
|
host: Annotated[
|
||||||
str,
|
str,
|
||||||
typer.Option(
|
typer.Option("--host", help="Hostname for live preview server."),
|
||||||
"--host", help="Hostname for live preview server."
|
|
||||||
),
|
|
||||||
] = "localhost",
|
] = "localhost",
|
||||||
port: Annotated[
|
port: Annotated[
|
||||||
int,
|
int,
|
||||||
|
@ -90,7 +86,9 @@ def serve(
|
||||||
output: Annotated[
|
output: Annotated[
|
||||||
Path | None,
|
Path | None,
|
||||||
typer.Option(
|
typer.Option(
|
||||||
"--output", "-o", help="Location to write built website"
|
"--output",
|
||||||
|
"-o",
|
||||||
|
help="Location to write built website. Temporary directory by default.",
|
||||||
),
|
),
|
||||||
] = None,
|
] = None,
|
||||||
draft: Annotated[
|
draft: Annotated[
|
||||||
|
|
|
@ -2,6 +2,7 @@ import io
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
@ -173,67 +174,68 @@ def serve(
|
||||||
live_reload: bool = True,
|
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)
|
# create temp dir, automatic cleanup
|
||||||
# initial site build
|
with tempfile.TemporaryDirectory() as tmp:
|
||||||
builder.build()
|
builder = ZonaBuilder(root, Path(tmp), draft)
|
||||||
# use discovered paths if none provided
|
# initial site build
|
||||||
if output is None:
|
builder.build()
|
||||||
output = builder.layout.output
|
# use discovered paths if none provided
|
||||||
if root is None:
|
if output is None:
|
||||||
root = builder.layout.root
|
output = builder.layout.output
|
||||||
|
if root is None:
|
||||||
|
root = builder.layout.root
|
||||||
|
|
||||||
# spin up websocket server for live reloading
|
# spin up websocket server for live reloading
|
||||||
if live_reload:
|
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)
|
||||||
# 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:
|
else:
|
||||||
handler = QuietHandler
|
handler = QuietHandler
|
||||||
ws_server = None
|
ws_server = None
|
||||||
# serve the output directory
|
# serve the output directory
|
||||||
os.chdir(output)
|
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:
|
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}")
|
||||||
print("Exit with <c-c>")
|
print("Exit with <c-c>")
|
||||||
|
|
||||||
# start server in a thread
|
# start server in a thread
|
||||||
server_thread = threading.Thread(
|
server_thread = threading.Thread(
|
||||||
target=httpd.serve_forever, daemon=True
|
target=httpd.serve_forever, daemon=True
|
||||||
)
|
)
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
|
|
||||||
# initialize reload handler
|
# initialize reload handler
|
||||||
event_handler = ZonaReloadHandler(builder, output, ws_server)
|
event_handler = ZonaReloadHandler(builder, output, ws_server)
|
||||||
observer = Observer()
|
observer = Observer()
|
||||||
observer.schedule(
|
observer.schedule(
|
||||||
event_handler, path=str(root / "content"), recursive=True
|
event_handler, path=str(root / "content"), recursive=True
|
||||||
)
|
)
|
||||||
observer.schedule(
|
observer.schedule(
|
||||||
event_handler, path=str(root / "templates"), recursive=True
|
event_handler, path=str(root / "templates"), recursive=True
|
||||||
)
|
)
|
||||||
observer.start()
|
observer.start()
|
||||||
|
|
||||||
# function to shut down gracefully
|
# function to shut down gracefully
|
||||||
def shutdown_handler(_a: int, _b: FrameType | None):
|
def shutdown_handler(_a: int, _b: FrameType | None):
|
||||||
logger.info("Shutting down...")
|
print("Shutting down...")
|
||||||
observer.stop()
|
observer.stop()
|
||||||
httpd.shutdown()
|
httpd.shutdown()
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
# register shutdown handler
|
# register shutdown handler
|
||||||
signal.signal(signal.SIGINT, shutdown_handler)
|
signal.signal(signal.SIGINT, shutdown_handler)
|
||||||
signal.signal(signal.SIGTERM, shutdown_handler)
|
signal.signal(signal.SIGTERM, shutdown_handler)
|
||||||
|
|
||||||
# start file change watcher
|
# start file change watcher
|
||||||
observer.join()
|
observer.join()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue