Compare commits

...
1 Commits
Author SHA1 Message Date
omicron a1ecd0f480 Allow local template overrides in the site directory
closes #13
2026-10-20 19:25:55 +02:00
3 changed files with 31 additions and 8 deletions

No files matched your search

-1
View File
@@ -149,7 +149,6 @@ def init(args: argparse.Namespace) -> None:
"items_per_page": int(items_per_page), "items_per_page": int(items_per_page),
} }
) )
Site.resolve_template_path(config.template)
config.to_file(config_path) config.to_file(config_path)
(args.site / "content").mkdir(exist_ok=True) (args.site / "content").mkdir(exist_ok=True)
+9 -5
View File
@@ -27,6 +27,7 @@ from pathlib import Path
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
builtin_templates = Path(__file__).parent / "templates"
class Site: class Site:
@@ -43,15 +44,18 @@ class Site:
self.tags_by_count: list[tuple[str, int]] = [] self.tags_by_count: list[tuple[str, int]] = []
self.config = SiteConfig.from_file(site / "config.yml") self.config = SiteConfig.from_file(site / "config.yml")
self.template_path: Path = Site.resolve_template_path(self.config.template) self.template_path: Path = self.resolve_template_path(self.config.template)
self.output_path: Path = self.site_path / "output" self.output_path: Path = self.site_path / "output"
self.jinja_env = Environment(loader=FileSystemLoader(self.template_path)) self.jinja_env = Environment(loader=FileSystemLoader(self.template_path))
@staticmethod def resolve_template_path(self, template: str) -> Path:
def resolve_template_path(template: str) -> Path: path = self.site_path / "templates" / template
path = Path(__file__).parent / "templates" / template if path.is_dir():
return path
path = builtin_templates / template
if not path.is_dir(): if not path.is_dir():
raise ConfigError(f"template '{template}' not found at {path}") raise ConfigError(f"template '{template}' not found.")
return path return path
def add_by_section(self, content: Content) -> None: def add_by_section(self, content: Content) -> None:
+22 -2
View File
@@ -78,9 +78,29 @@ def test_clean_removes_output_directory(make_site):
assert not site.output_path.exists() assert not site.output_path.exists()
def test_resolve_template_path_raises_for_missing_template(): def test_resolve_template_path_raises_for_missing_template(site_dir):
path = site_dir("thin_site")
(path / "config.yml").write_text("name: test\ntemplate: does-not-exist\n")
with pytest.raises(ConfigError, match="not found"): with pytest.raises(ConfigError, match="not found"):
Site.resolve_template_path("does-not-exist") Site(path)
def test_resolve_template_path_prefers_local_override(site_dir):
path = site_dir("thin_site")
(path / "config.yml").write_text("name: test\ntemplate: plain\n")
local = path / "templates" / "plain"
local.mkdir(parents=True)
assert Site(path).template_path == local
def test_resolve_template_path_falls_back_to_builtin(site_dir):
path = site_dir("thin_site")
(path / "config.yml").write_text("name: test\ntemplate: plain\n")
assert Site(path).template_path.name == "plain"
assert not Site(path).template_path.is_relative_to(path)
def test_home_url(site_dir): def test_home_url(site_dir):