Compare commits

...

3 commits

8 changed files with 24 additions and 9 deletions

View file

@ -317,6 +317,7 @@ available:
| `template` | `str \| none` = `none` | Template to use for this page. Relative to `templates/`, `.html` extension optional. | | `template` | `str \| none` = `none` | Template to use for this page. Relative to `templates/`, `.html` extension optional. |
| `post` | `bool \| none` = `none` | Whether this page is a **post**. `true`/`false` is _absolute_. Leave it unset for automatic detection. | | `post` | `bool \| none` = `none` | Whether this page is a **post**. `true`/`false` is _absolute_. Leave it unset for automatic detection. |
| `draft` | `bool` = `false` | Whether this page is a draft. See [drafts](#drafts) for more. | | `draft` | `bool` = `false` | Whether this page is a draft. See [drafts](#drafts) for more. |
| `ignore` | `bool` = `false` | Whether this page should be ignored in _both_ `final` and `draft` contexts. |
| `math` | `bool` = `true` | Whether the LaTeX extension should be enabled for this page. | | `math` | `bool` = `true` | Whether the LaTeX extension should be enabled for this page. |
**Note**: you can specify the date in any format that can be parsed by **Note**: you can specify the date in any format that can be parsed by

View file

@ -62,7 +62,7 @@ allowedUntypedLibraries = ["frontmatter", "pygments", "pymdownx", "l2m4m"]
[tool.ruff] [tool.ruff]
line-length = 70 line-length = 70
indent-width = 4 indent-width = 4
target-version = "py311" target-version = "py312"
[tool.ruff.lint] [tool.ruff.lint]
fixable = ["ALL"] fixable = ["ALL"]

View file

@ -53,7 +53,7 @@ class ZonaBuilder:
): ):
logger.debug(f"Parsing {path.name}.") logger.debug(f"Parsing {path.name}.")
item.metadata, item.content = parse_metadata(path) item.metadata, item.content = parse_metadata(path)
if ( if item.metadata.ignore or (
item.metadata.draft item.metadata.draft
and not self.config.build.include_drafts and not self.config.build.include_drafts
): ):

View file

@ -59,7 +59,9 @@ def build(
""" """
if draft: if draft:
print("Option override: including drafts.") print("Option override: including drafts.")
builder = ZonaBuilder(cli_root=root, cli_output=output, draft=draft) builder = ZonaBuilder(
cli_root=root, cli_output=output, draft=draft
)
builder.build() builder.build()
@ -73,7 +75,9 @@ def serve(
] = None, ] = None,
host: Annotated[ host: Annotated[
str, str,
typer.Option("--host", help="Hostname for live preview server."), typer.Option(
"--host", help="Hostname for live preview server."
),
] = "localhost", ] = "localhost",
port: Annotated[ port: Annotated[
int, int,

View file

@ -76,7 +76,9 @@ IGNORELIST = [".marksman.toml"]
class ZonaConfig: class ZonaConfig:
base_url: str = "/" base_url: str = "/"
# dictionary where key is name, value is url # dictionary where key is name, value is url
sitemap: SitemapConfig = field(default_factory=lambda: {"Home": "/"}) sitemap: SitemapConfig = field(
default_factory=lambda: {"Home": "/"}
)
# list of globs relative to content that should be ignored # list of globs relative to content that should be ignored
ignore: list[str] = field(default_factory=lambda: IGNORELIST) ignore: list[str] = field(default_factory=lambda: IGNORELIST)
markdown: MarkdownConfig = field(default_factory=MarkdownConfig) markdown: MarkdownConfig = field(default_factory=MarkdownConfig)

View file

@ -24,6 +24,7 @@ class Metadata:
template: str | None = None template: str | None = None
post: bool | None = None post: bool | None = None
draft: bool = False draft: bool = False
ignore: bool = False
math: bool = True math: bool = True

View file

@ -238,7 +238,9 @@ def serve(
event_handler, path=str(root / "content"), recursive=True event_handler, path=str(root / "content"), recursive=True
) )
observer.schedule( observer.schedule(
event_handler, path=str(root / "templates"), recursive=True event_handler,
path=str(root / "templates"),
recursive=True,
) )
observer.start() observer.start()

View file

@ -19,7 +19,9 @@ def get_resource(path: str) -> ZonaResource:
if file.is_file(): if file.is_file():
return ZonaResource(name=path, contents=file.read_text()) return ZonaResource(name=path, contents=file.read_text())
else: else:
raise FileNotFoundError(f"{path} is not a valid Zona resource!") raise FileNotFoundError(
f"{path} is not a valid Zona resource!"
)
def get_resources(subdir: str) -> list[ZonaResource]: def get_resources(subdir: str) -> list[ZonaResource]:
@ -75,10 +77,13 @@ def normalize_url(url: str) -> str:
return url return url
def should_ignore(path: Path, patterns: list[str], base: Path) -> bool: def should_ignore(
path: Path, patterns: list[str], base: Path
) -> bool:
rel_path = path.relative_to(base) rel_path = path.relative_to(base)
return any( return any(
fnmatch.fnmatch(str(rel_path), pattern) for pattern in patterns fnmatch.fnmatch(str(rel_path), pattern)
for pattern in patterns
) )