diff --git a/omicron/ssg/output/content.py b/omicron/ssg/output/content.py index 2b8a90c..470deb5 100644 --- a/omicron/ssg/output/content.py +++ b/omicron/ssg/output/content.py @@ -1,6 +1,6 @@ import re from typing import TYPE_CHECKING -from omicron.ssg.output.output import Output, OutputError +from omicron.ssg.output.output import Output, OutputError, is_normalized from pathlib import Path from datetime import date @@ -31,6 +31,10 @@ class Content(Output): super().__init__(site, Content.build_path(section, slug)) if tags is None: tags = set() + if not source.is_absolute(): + raise ContentError("content source path must be absolute") + if not is_normalized(source): + raise ContentError("content source path must be normalized") self.source = source self.section: str = section self.created = created diff --git a/omicron/ssg/site.py b/omicron/ssg/site.py index 387fe36..3360ba0 100644 --- a/omicron/ssg/site.py +++ b/omicron/ssg/site.py @@ -38,6 +38,7 @@ class Site: self.other_outputs: list[Output] = [] self.by_tag: dict[str, list[Content]] = {} self.by_path: dict[Path, Output] = {} + self.by_source: dict[Path, Content] = {} self.by_section: dict[str, list[Content]] = {} self.tags_by_count: list[tuple[str, int]] = [] @@ -123,6 +124,10 @@ class Site: self.by_path[d.destination] = d self.directories.append(d) + def add_by_source(self, content: Content) -> None: + assert content.source.is_absolute(), "Expecting content to have absolute source" + self.by_source[content.source] = content + def home_url(self) -> str: return self.base_dir.as_posix() @@ -172,6 +177,7 @@ class Site: self.add_by_path(content) self.add_by_section(content) self.add_by_tag(content) + self.add_by_source(content) self.content.append(content) self.update_tags_by_count() for index in discover_index(self):