diff --git a/pipelines/songs/render.py b/pipelines/songs/render.py index 3f823be..c7dfc44 100644 --- a/pipelines/songs/render.py +++ b/pipelines/songs/render.py @@ -20,10 +20,7 @@ def validate(fm: dict, path: Path) -> None: if not val or not str(val).strip(): errors.append(f"missing or empty '{field}'") - wiki = fm.get("wiki") - if not isinstance(wiki, dict) or "publish" not in wiki: - errors.append("missing 'wiki.publish'") - elif not isinstance(wiki["publish"], bool): + if not isinstance(fm.get("wiki", {}).get("publish"), bool): errors.append("'wiki.publish' must be a boolean (true/false), not a string") if "release_date" in fm and fm["release_date"]: @@ -80,12 +77,8 @@ def connect_wiki() -> mwclient.Site: def publish_one(rel: Path, post, site: mwclient.Site, source_ref: str, gitea_repo_url: str) -> str: - """Returns 'published', 'noop', or 'skipped'.""" + """Returns 'published' or 'noop'.""" fm = post.metadata - - if not fm["wiki"]["publish"]: - return "skipped" - body_wikitext = markdown_to_wikitext(strip_first_h1(post.content)) source_url = f"{gitea_repo_url}/src/commit/{source_ref}/{rel}" page_content = build_wikitext(fm, body_wikitext, source_url, source_ref) @@ -109,16 +102,19 @@ def load_and_validate(files: list[Path], source_dir: Path) -> dict[Path, object] continue post = frontmatter.load(str(path)) + + wiki = post.metadata.get("wiki") + if not isinstance(wiki, dict) or not wiki.get("publish"): + continue + validate(post.metadata, path) - if post.metadata["wiki"]["publish"]: - title = str(post.metadata["title"]) - if title in titles: - raise ValueError( - f"Duplicate wiki title '{title}': {path} and {titles[title]}" - ) - titles[title] = path - + title = str(post.metadata["title"]) + if title in titles: + raise ValueError( + f"Duplicate wiki title '{title}': {path} and {titles[title]}" + ) + titles[title] = path posts[path] = post return posts @@ -161,18 +157,14 @@ def main() -> None: site = connect_wiki() - counts = {"published": 0, "noop": 0, "skipped": 0} + counts = {"published": 0, "noop": 0} for abs_path, post in posts.items(): rel = abs_path.relative_to(source_dir) outcome = publish_one(rel, post, site, source_ref, gitea_repo_url) counts[outcome] += 1 print(f" [{outcome}] {rel}") - print( - f"\nDone: {counts['published']} published, " - f"{counts['noop']} unchanged, " - f"{counts['skipped']} skipped (wiki.publish=false)." - ) + print(f"\nDone: {counts['published']} published, {counts['noop']} unchanged.") if __name__ == "__main__":