diff --git a/src/zona/builder.py b/src/zona/builder.py index 01c411f..556baa1 100644 --- a/src/zona/builder.py +++ b/src/zona/builder.py @@ -8,6 +8,9 @@ from zona.config import ZonaConfig from zona import util from pathlib import Path from rich import print +from zona.log import get_logger + +logger = get_logger() class ZonaBuilder: @@ -39,9 +42,7 @@ class ZonaBuilder: destination=destination, url=str(destination.relative_to(layout.output)), ) - if path.name.endswith( - ".md" - ) and not path.is_relative_to( + if path.name.endswith(".md") and not path.is_relative_to( layout.root / "content" / "static" ): item.metadata, item.content = parse_metadata(path) @@ -56,13 +57,11 @@ class ZonaBuilder: item.copy = False name = destination.stem if name == "index": - item.destination = ( - item.destination.with_suffix(".html") + item.destination = item.destination.with_suffix( + ".html" ) else: - relative = path.relative_to(base).with_suffix( - "" - ) + relative = path.relative_to(base).with_suffix("") name = relative.stem item.destination = ( layout.output @@ -74,9 +73,7 @@ class ZonaBuilder: layout.output ) item.url = ( - "" - if rel_url == Path(".") - else rel_url.as_posix() + "" if rel_url == Path(".") else rel_url.as_posix() ) items.append(item) # print(item) @@ -122,5 +119,7 @@ class ZonaBuilder: util.copy_static_file(item.source, dst) def build(self): + logger.debug("Discovering...") self._discover() + logger.debug("Building...") self._build() diff --git a/src/zona/cli.py b/src/zona/cli.py index c5a7844..a211e1f 100644 --- a/src/zona/cli.py +++ b/src/zona/cli.py @@ -3,9 +3,12 @@ from pathlib import Path from zona import server from zona.builder import ZonaBuilder from zona.layout import initialize_site +from zona.log import setup_logging app = typer.Typer() +setup_logging("DEBUG") + @app.command() def build(root: Path | None = None, output: Path | None = None): diff --git a/src/zona/log.py b/src/zona/log.py new file mode 100644 index 0000000..f3a3f25 --- /dev/null +++ b/src/zona/log.py @@ -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) diff --git a/src/zona/markdown.py b/src/zona/markdown.py index 8faf7db..774a90c 100644 --- a/src/zona/markdown.py +++ b/src/zona/markdown.py @@ -14,6 +14,9 @@ from pygments.formatters import HtmlFormatter from zona import util from zona.models import Item +from zona.log import get_logger + +logger = get_logger() class ZonaRenderer(HTMLRenderer): @@ -28,7 +31,6 @@ class ZonaRenderer(HTMLRenderer): super().__init__() self.resolve: bool = resolve if self.resolve: - # print("Resolve is set") assert source is not None assert layout is not None assert item_map is not None @@ -57,11 +59,11 @@ class ZonaRenderer(HTMLRenderer): item = self.item_map.get(resolved) if item: href = util.normalize_url(item.url) - print( + logger.debug( f"Link in file {self.source}: {_href} resolved to {href}" ) else: - print( + logger.debug( f"Warning: resolved path {resolved} not found in item map" ) body: Any = self.render_children(element) diff --git a/src/zona/server.py b/src/zona/server.py index b54aee4..e4a7cbd 100644 --- a/src/zona/server.py +++ b/src/zona/server.py @@ -2,7 +2,6 @@ import signal import os import sys from types import FrameType -from rich import print from http.server import ThreadingHTTPServer, SimpleHTTPRequestHandler import threading from typing import override @@ -10,6 +9,9 @@ from watchdog.observers import Observer from zona.builder import ZonaBuilder from watchdog.events import FileSystemEventHandler, FileSystemEvent from pathlib import Path +from zona.log import get_logger + +logger = get_logger() class QuietHandler(SimpleHTTPRequestHandler): @@ -44,26 +46,24 @@ class ZonaReloadHandler(FileSystemEventHandler): @override def on_modified(self, event: FileSystemEvent): if not self._should_ignore(event): - print(f"Modified: {event.src_path}, rebuilding...") + logger.info(f"Modified: {event.src_path}, rebuilding...") self.builder.build() @override def on_created(self, event: FileSystemEvent): if not self._should_ignore(event): - print(f"Modified: {event.src_path}, rebuilding...") + logger.info(f"Modified: {event.src_path}, rebuilding...") self.builder.build() -def run_http_server( - dir: Path, host: str = "localhost", port: int = 8000 -): +def run_http_server(dir: Path, host: str = "localhost", port: int = 8000): os.chdir(dir) handler = QuietHandler httpd = ZonaServer( server_address=(host, port), RequestHandlerClass=handler ) - print(f"Serving {dir} at http://{host}:{port}") - print(f"Exit with ") + logger.info(f"Serving {dir} at http://{host}:{port}") + logger.info(f"Exit with ") httpd.serve_forever() @@ -91,7 +91,7 @@ def serve( observer.start() def shutdown_handler(_a: int, _b: FrameType | None): - print("Shutting down...") + logger.info("Shutting down...") observer.stop() signal.signal(signal.SIGINT, shutdown_handler)