diff --git a/omicron/ssg/output/__init__.py b/omicron/ssg/output/__init__.py index ccfd9ee..f040a53 100644 --- a/omicron/ssg/output/__init__.py +++ b/omicron/ssg/output/__init__.py @@ -4,6 +4,7 @@ from omicron.ssg.output.factory import create_content, is_content from omicron.ssg.output.file import File from omicron.ssg.output.index import Index, discover_index from omicron.ssg.output.memory import Memory +from omicron.ssg.output.directory import Directory from omicron.ssg.output.symlink import Symlink from omicron.ssg.output.tags import Tags, discover_tags @@ -17,6 +18,7 @@ __all__ = [ "File", "Index", "discover_index", + "Directory", "Memory", "Symlink", "Tags", diff --git a/omicron/ssg/output/directory.py b/omicron/ssg/output/directory.py new file mode 100644 index 0000000..d02a333 --- /dev/null +++ b/omicron/ssg/output/directory.py @@ -0,0 +1,24 @@ +import logging +from typing import TYPE_CHECKING +from omicron.ssg.output.output import Output +from pathlib import Path + +log = logging.getLogger(__name__) + +if TYPE_CHECKING: + from omicron.ssg.site import Site # for static checking with mypy +else: + Site = "omicron.ssg.site.Site" # for runtime checking with beartype + + +class Directory(Output): + def __init__(self, site: Site, destination: Path): + super().__init__(site, destination) + url_path = Path("/") / site.base_dir / destination + # rebuild url because Output strips /index.html which is a valid dir + self.url = url_path.as_posix() + + def write(self) -> None: + dest = self.site.output_path / self.destination + dest.mkdir(parents=True, exist_ok=True) + log.debug("Created directory %s", dest)