added logging

This commit is contained in:
Daniel Fichtinger 2025-07-01 18:31:07 -04:00
parent 4fdb3365b9
commit d1480df28a
5 changed files with 52 additions and 23 deletions

View file

@ -8,6 +8,9 @@ from zona.config import ZonaConfig
from zona import util from zona import util
from pathlib import Path from pathlib import Path
from rich import print from rich import print
from zona.log import get_logger
logger = get_logger()
class ZonaBuilder: class ZonaBuilder:
@ -39,9 +42,7 @@ class ZonaBuilder:
destination=destination, destination=destination,
url=str(destination.relative_to(layout.output)), url=str(destination.relative_to(layout.output)),
) )
if path.name.endswith( if path.name.endswith(".md") and not path.is_relative_to(
".md"
) and not path.is_relative_to(
layout.root / "content" / "static" layout.root / "content" / "static"
): ):
item.metadata, item.content = parse_metadata(path) item.metadata, item.content = parse_metadata(path)
@ -56,13 +57,11 @@ class ZonaBuilder:
item.copy = False item.copy = False
name = destination.stem name = destination.stem
if name == "index": if name == "index":
item.destination = ( item.destination = item.destination.with_suffix(
item.destination.with_suffix(".html") ".html"
) )
else: else:
relative = path.relative_to(base).with_suffix( relative = path.relative_to(base).with_suffix("")
""
)
name = relative.stem name = relative.stem
item.destination = ( item.destination = (
layout.output layout.output
@ -74,9 +73,7 @@ class ZonaBuilder:
layout.output layout.output
) )
item.url = ( item.url = (
"" "" if rel_url == Path(".") else rel_url.as_posix()
if rel_url == Path(".")
else rel_url.as_posix()
) )
items.append(item) items.append(item)
# print(item) # print(item)
@ -122,5 +119,7 @@ class ZonaBuilder:
util.copy_static_file(item.source, dst) util.copy_static_file(item.source, dst)
def build(self): def build(self):
logger.debug("Discovering...")
self._discover() self._discover()
logger.debug("Building...")
self._build() self._build()

View file

@ -3,9 +3,12 @@ from pathlib import Path
from zona import server from zona import server
from zona.builder import ZonaBuilder from zona.builder import ZonaBuilder
from zona.layout import initialize_site from zona.layout import initialize_site
from zona.log import setup_logging
app = typer.Typer() app = typer.Typer()
setup_logging("DEBUG")
@app.command() @app.command()
def build(root: Path | None = None, output: Path | None = None): def build(root: Path | None = None, output: Path | None = None):

25
src/zona/log.py Normal file
View file

@ -0,0 +1,25 @@
import logging
from typing import Literal
from rich.logging import RichHandler
_LOGGER_NAME = "zona"
def setup_logging(
level: Literal["INFO", "DEBUG", "WARN", "ERROR"] = "INFO",
):
logger = logging.getLogger(_LOGGER_NAME)
logger.setLevel(level.upper())
logger.propagate = False
if not logger.handlers:
handler = RichHandler(rich_tracebacks=True, show_path=False)
handler.setLevel(level.upper())
formatter = logging.Formatter("%(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
def get_logger(name: str = _LOGGER_NAME) -> logging.Logger:
return logging.getLogger(name)

View file

@ -14,6 +14,9 @@ from pygments.formatters import HtmlFormatter
from zona import util from zona import util
from zona.models import Item from zona.models import Item
from zona.log import get_logger
logger = get_logger()
class ZonaRenderer(HTMLRenderer): class ZonaRenderer(HTMLRenderer):
@ -28,7 +31,6 @@ class ZonaRenderer(HTMLRenderer):
super().__init__() super().__init__()
self.resolve: bool = resolve self.resolve: bool = resolve
if self.resolve: if self.resolve:
# print("Resolve is set")
assert source is not None assert source is not None
assert layout is not None assert layout is not None
assert item_map is not None assert item_map is not None
@ -57,11 +59,11 @@ class ZonaRenderer(HTMLRenderer):
item = self.item_map.get(resolved) item = self.item_map.get(resolved)
if item: if item:
href = util.normalize_url(item.url) href = util.normalize_url(item.url)
print( logger.debug(
f"Link in file {self.source}: {_href} resolved to {href}" f"Link in file {self.source}: {_href} resolved to {href}"
) )
else: else:
print( logger.debug(
f"Warning: resolved path {resolved} not found in item map" f"Warning: resolved path {resolved} not found in item map"
) )
body: Any = self.render_children(element) body: Any = self.render_children(element)

View file

@ -2,7 +2,6 @@ import signal
import os import os
import sys import sys
from types import FrameType from types import FrameType
from rich import print
from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler
import threading import threading
from typing import override from typing import override
@ -10,6 +9,9 @@ from watchdog.observers import Observer
from zona.builder import ZonaBuilder from zona.builder import ZonaBuilder
from watchdog.events import FileSystemEventHandler, FileSystemEvent from watchdog.events import FileSystemEventHandler, FileSystemEvent
from pathlib import Path from pathlib import Path
from zona.log import get_logger
logger = get_logger()
class QuietHandler(SimpleHTTPRequestHandler): class QuietHandler(SimpleHTTPRequestHandler):
@ -44,26 +46,24 @@ class ZonaReloadHandler(FileSystemEventHandler):
@override @override
def on_modified(self, event: FileSystemEvent): def on_modified(self, event: FileSystemEvent):
if not self._should_ignore(event): if not self._should_ignore(event):
print(f"Modified: {event.src_path}, rebuilding...") logger.info(f"Modified: {event.src_path}, rebuilding...")
self.builder.build() self.builder.build()
@override @override
def on_created(self, event: FileSystemEvent): def on_created(self, event: FileSystemEvent):
if not self._should_ignore(event): if not self._should_ignore(event):
print(f"Modified: {event.src_path}, rebuilding...") logger.info(f"Modified: {event.src_path}, rebuilding...")
self.builder.build() self.builder.build()
def run_http_server( def run_http_server(dir: Path, host: str = "localhost", port: int = 8000):
dir: Path, host: str = "localhost", port: int = 8000
):
os.chdir(dir) os.chdir(dir)
handler = QuietHandler handler = QuietHandler
httpd = ZonaServer( httpd = ZonaServer(
server_address=(host, port), RequestHandlerClass=handler server_address=(host, port), RequestHandlerClass=handler
) )
print(f"Serving {dir} at http://{host}:{port}") logger.info(f"Serving {dir} at http://{host}:{port}")
print(f"Exit with <c-c>") logger.info(f"Exit with <c-c>")
httpd.serve_forever() httpd.serve_forever()
@ -91,7 +91,7 @@ def serve(
observer.start() observer.start()
def shutdown_handler(_a: int, _b: FrameType | None): def shutdown_handler(_a: int, _b: FrameType | None):
print("Shutting down...") logger.info("Shutting down...")
observer.stop() observer.stop()
signal.signal(signal.SIGINT, shutdown_handler) signal.signal(signal.SIGINT, shutdown_handler)