From 2a03332bb08751bdd3c78c64f92b8bf4baba6c1b Mon Sep 17 00:00:00 2001 From: omicron Date: Wed, 12 Aug 2026 21:41:41 +0200 Subject: [PATCH] Create Tags(Output) class and move tag rendering there from Site --- omicron/ssg/output/__init__.py | 3 +++ omicron/ssg/output/tags.py | 28 ++++++++++++++++++++++++++++ omicron/ssg/site.py | 12 ++++-------- 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 omicron/ssg/output/tags.py diff --git a/omicron/ssg/output/__init__.py b/omicron/ssg/output/__init__.py index 07c1d7c..df8f0f9 100644 --- a/omicron/ssg/output/__init__.py +++ b/omicron/ssg/output/__init__.py @@ -3,6 +3,7 @@ from omicron.ssg.output.content import Content, ContentError from omicron.ssg.output.factory import create_content, is_content from omicron.ssg.output.index import Index, discover_index from omicron.ssg.output.memory import Memory +from omicron.ssg.output.tags import Tags, discover_tags __all__ = [ "Output", @@ -13,4 +14,6 @@ __all__ = [ "Index", "discover_index", "Memory", + "Tags", + "discover_tags", ] diff --git a/omicron/ssg/output/tags.py b/omicron/ssg/output/tags.py new file mode 100644 index 0000000..806b3f0 --- /dev/null +++ b/omicron/ssg/output/tags.py @@ -0,0 +1,28 @@ +import logging +from typing import TYPE_CHECKING +from omicron.ssg.output.output import Output + +log = logging.getLogger(__name__) + +if TYPE_CHECKING: + from omicron.ssg.site import Site +else: + Site = "omicron.ssg.site.Site" + + +class Tags(Output): + def __init__(self, tags: list[tuple[str, int]]): + super().__init__("tags/index.html") + self.tags = tags + + def write(self, site: Site) -> None: + template = site.jinja_env.get_template("tags.html") + html = template.render(site=site, tags=self.tags) + dest = site.output_path / self.uri + dest.parent.mkdir(parents=True, exist_ok=True) + dest.write_text(html, encoding="utf-8") + log.debug("Wrote %s", dest) + + +def discover_tags(site: Site) -> Tags: + return Tags(site.tags_by_count) diff --git a/omicron/ssg/site.py b/omicron/ssg/site.py index a67ec28..57f3a2c 100644 --- a/omicron/ssg/site.py +++ b/omicron/ssg/site.py @@ -10,6 +10,7 @@ from omicron.ssg.output import ( create_content, Memory, discover_index, + discover_tags, ) from omicron.ssg.markdown import highlight_style @@ -120,15 +121,11 @@ class Site: for index in discover_index(self): self.add_by_uri(index) self.other_outputs.append(index) + tags_page = discover_tags(self) + self.add_by_uri(tags_page) + self.other_outputs.append(tags_page) log.info("Discovered %d content items", len(self.content)) - def render_tags_page(self) -> None: - template = self.jinja_env.get_template("tags.html") - html = template.render(site=self, tags=self.tags_by_count) - tags_dir = self.output_path / "tags" - tags_dir.mkdir(parents=True, exist_ok=True) - (tags_dir / "index.html").write_text(html, encoding="utf-8") - def build(self) -> None: if not self.origin: log.warning( @@ -141,6 +138,5 @@ class Site: self.output_path.mkdir(parents=True, exist_ok=True) for content in self.content: content.write(self) - self.render_tags_page() for output in self.other_outputs: output.write(self)