From 2fe6b689b0b0473e55b2950a441556d5d3f5777e Mon Sep 17 00:00:00 2001 From: Labyricorn Date: Thu, 13 Aug 2026 15:12:33 -0700 Subject: [PATCH] Add blog and article narration import --- README.md | 47 ++ scripts/article_editor.py | 1159 ++++++++++++++++++++++++++++++++ scripts/blog_editor.py | 959 ++++++++++++++++++++++++++ scripts/narration_import.py | 91 +++ support/ffmpeg.exe | Bin 0 -> 551424 bytes tests/test_article_editor.py | 187 ++++++ tests/test_blog_editor.py | 138 ++++ tests/test_narration_import.py | 91 +++ 8 files changed, 2672 insertions(+) create mode 100644 scripts/article_editor.py create mode 100644 scripts/blog_editor.py create mode 100644 scripts/narration_import.py create mode 100644 support/ffmpeg.exe create mode 100644 tests/test_article_editor.py create mode 100644 tests/test_blog_editor.py create mode 100644 tests/test_narration_import.py diff --git a/README.md b/README.md index b00952e..fce752a 100644 --- a/README.md +++ b/README.md @@ -289,6 +289,53 @@ test -f build/index.html The project currently has no third-party Lektor packages or plugins. +### Local blog editor + +For a focused desktop form that creates and edits records under `content/blog/`, +run: + +```bash +python scripts/blog_editor.py +``` + +The editor uses Tkinter from the Python standard library. It reads the approved +tag choices from `content/tags/`, writes normal `contents.lr` records to the +working tree, and can delete a loaded entry after explicit confirmation. Entry +deletion removes its complete record directory, including attachments, so the +confirmation identifies additional files before proceeding. The editor does +not commit, push, build, or deploy changes. Review saved or deleted records with +the routine content workflow above. + +For a saved entry, **Choose Narration WAV…** converts a selected WAV using +`ffmpeg` from `PATH`, or the repository-provided `support/ffmpeg.exe` when it +is not installed system-wide, and writes the entry-local `narration.mp3` +attachment that the existing narration player recognizes. It uses a fixed +44.1 kHz mono, 96 kbps MP3 preset; replacing or removing narration requires +confirmation. If `ffmpeg` is unavailable or conversion fails, the existing +narration attachment is left unchanged. + +### Local article editor + +For a focused desktop form that creates and edits records under +`content/articles/`, run: + +```bash +python scripts/article_editor.py +``` + +The article editor follows the existing cover convention: a first Markdown +image referencing an article-local `cover-image.png` or `cover-image.jpg`. +Choose a PNG, JPG, or JPEG in the editor and it is copied beside `contents.lr` +with that canonical name. Replacing or removing a cover requires confirmation. +The editor does not commit, push, build, or deploy changes; review all working +tree changes with the routine content workflow above. + +The article editor also has the same saved-entry narration control: it converts +a selected WAV to the article-local `narration.mp3` attachment using `ffmpeg` +from `PATH` or `support/ffmpeg.exe`, with the fixed 44.1 kHz mono, 96 kbps MP3 +preset. Replacement and removal require confirmation; failed conversion leaves +any existing narration unchanged. + ## Production filesystem and permissions ```text diff --git a/scripts/article_editor.py b/scripts/article_editor.py new file mode 100644 index 0000000..62b413e --- /dev/null +++ b/scripts/article_editor.py @@ -0,0 +1,1159 @@ +#!/usr/bin/env python3 +"""Small, article-specific desktop editor for Labyricorn Lektor records.""" + +from __future__ import annotations + +import argparse +import configparser +from dataclasses import dataclass +from datetime import date as current_date +import os +from pathlib import Path +import re +import shutil +import tempfile +import unicodedata +from urllib.parse import urlsplit + +from narration_import import NarrationImportError, import_wav, narration_path, remove_narration + + +SLUG_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") +SEPARATOR_RE = re.compile(r"(?m)(^---[ \t]*(?:\r\n|\n|$))") +FIELD_RE = re.compile(r"([A-Za-z_][A-Za-z0-9_-]*):(.*)") +FIELD_ORDER = ( + "_model", + "title", + "date", + "updated", + "author", + "tags", + "kicker", + "summary", + "external_url", + "published_urls", + "body", +) +EXPECTED_MODEL_FIELDS = { + "title": "string", + "date": "date", + "updated": "date", + "author": "string", + "tags": "checkboxes", + "kicker": "select", + "summary": "text", + "body": "markdown", + "external_url": "url", + "published_urls": "strings", +} +IMAGE_SUFFIXES = {".png", ".jpg", ".jpeg"} +COVER_IMAGE_RE = re.compile( + r"\A(?P\s*)!\[(?P[^\]]*)\]\((?Pcover-image\.(?:png|jpe?g))\)(?P\r?\n(?:\r?\n)?)", + re.IGNORECASE, +) + + +class ArticleEditorError(Exception): + """An error that can be shown directly to an editor user.""" + + +@dataclass(frozen=True) +class Tag: + slug: str + title: str + + +@dataclass +class LrDocument: + blocks: list[str] + delimiters: list[str] + newline: str + source: str + + @classmethod + def parse(cls, text: str, source: str) -> "LrDocument": + parts = SEPARATOR_RE.split(text) + blocks = [parts[0]] + delimiters: list[str] = [] + for index in range(1, len(parts), 2): + delimiters.append(parts[index]) + blocks.append(parts[index + 1]) + + if not blocks or any(not block.strip() for block in blocks): + raise ArticleEditorError(f"{source}: empty or malformed record block") + newline = "\r\n" if "\r\n" in text else "\n" + document = cls(blocks, delimiters, newline, source) + document._field_indexes() + return document + + def render(self) -> str: + pieces = [self.blocks[0]] + for delimiter, block in zip(self.delimiters, self.blocks[1:]): + pieces.extend((delimiter, block)) + return "".join(pieces) + + def _field_indexes(self) -> dict[str, int]: + indexes: dict[str, int] = {} + for index, block in enumerate(self.blocks): + key, _value = self._parse_block(block) + if key in indexes: + raise ArticleEditorError(f"{self.source}: duplicate field {key!r}") + indexes[key] = index + return indexes + + def _parse_block(self, block: str) -> tuple[str, str]: + line_end = block.find("\n") + if line_end < 0: + first_line = block + remainder = "" + else: + first_line = block[:line_end].rstrip("\r") + remainder = block[line_end + 1 :] + match = FIELD_RE.fullmatch(first_line) + if match is None: + raise ArticleEditorError(f"{self.source}: malformed field header {first_line!r}") + key, inline = match.groups() + if inline.startswith(" "): + inline = inline[1:] + if inline: + value = inline + if remainder.rstrip("\r\n"): + value += "\n" + remainder.rstrip("\r\n") + else: + value = remainder.rstrip("\r\n") + return key, value + + def get(self, key: str, default: str = "") -> str: + index = self._field_indexes().get(key) + if index is None: + return default + return self._parse_block(self.blocks[index])[1] + + def set_field(self, key: str, value: str, style: str = "scalar") -> None: + indexes = self._field_indexes() + current_index = indexes.get(key) + if current_index is not None and self.get(key) == value: + return + rendered = self._render_field(key, value, style) + if current_index is not None: + self.blocks[current_index] = rendered + return + + desired_order = FIELD_ORDER.index(key) + insertion_index = len(self.blocks) + for candidate, index in indexes.items(): + if candidate in FIELD_ORDER and FIELD_ORDER.index(candidate) > desired_order: + insertion_index = min(insertion_index, index) + self.blocks.insert(insertion_index, rendered) + delimiter = f"---{self.newline}" + if insertion_index == 0: + self.delimiters.insert(0, delimiter) + else: + self.delimiters.insert(insertion_index - 1, delimiter) + + def remove_field(self, key: str) -> None: + index = self._field_indexes().get(key) + if index is None: + return + if index == 0: + raise ArticleEditorError(f"{self.source}: cannot remove the first record field") + del self.blocks[index] + del self.delimiters[index - 1] + + def _render_field(self, key: str, value: str, style: str) -> str: + if style == "published_urls": + lines = [line.strip() for line in value.splitlines() if line.strip()] + suffix = self.newline.join(lines) + if suffix: + suffix += self.newline + return f"{key}:{self.newline}{self.newline}{suffix}" + if style == "multiline" or "\n" in value: + suffix = value.rstrip("\r\n") + if suffix: + suffix += self.newline + return f"{key}:{self.newline}{suffix}" + return f"{key}: {value}{self.newline}" + + +@dataclass +class ArticleEntry: + slug: str + path: Path + document: LrDocument + original_bytes: bytes + + @property + def title(self) -> str: + return self.document.get("title") + + @property + def publication_date(self) -> str: + return self.document.get("date") + + +@dataclass(frozen=True) +class CoverImage: + name: str + alt: str + path: Path + + +class ArticleRepository: + def __init__(self, site_root: Path): + self.site_root = site_root.resolve() + self.article_root = (self.site_root / "content" / "articles").resolve() + self.tags_root = (self.site_root / "content" / "tags").resolve() + self._validate_layout() + self.tags = self._load_tags() + + def _validate_layout(self) -> None: + project_files = list(self.site_root.glob("*.lektorproject")) + if len(project_files) != 1: + raise ArticleEditorError( + f"{self.site_root}: expected exactly one .lektorproject file" + ) + if not self.article_root.is_dir() or not (self.article_root / "contents.lr").is_file(): + raise ArticleEditorError(f"missing Lektor article section at {self.article_root}") + if not self.tags_root.is_dir(): + raise ArticleEditorError(f"missing controlled tag records at {self.tags_root}") + + model_path = self.site_root / "models" / "entry.ini" + parser = configparser.ConfigParser(interpolation=None) + try: + with model_path.open("r", encoding="utf-8") as model_file: + parser.read_file(model_file) + except (OSError, UnicodeError, configparser.Error) as exc: + raise ArticleEditorError(f"cannot read article entry model {model_path}: {exc}") from exc + + actual_fields = { + section.removeprefix("fields."): parser.get(section, "type", fallback="") + for section in parser.sections() + if section.startswith("fields.") + } + if actual_fields != EXPECTED_MODEL_FIELDS: + raise ArticleEditorError( + "models/entry.ini no longer matches the fields supported by this " + "article-specific editor" + ) + if parser.get("fields.tags", "source", fallback="") != "site.query('/tags')": + raise ArticleEditorError("the article tag field is not sourced from content/tags") + choices = [ + choice.strip() + for choice in parser.get("fields.kicker", "choices", fallback="").split(",") + ] + if "Article" not in choices: + raise ArticleEditorError("the entry model no longer permits the Article kicker") + + def _read_document(self, path: Path) -> tuple[LrDocument, bytes]: + try: + raw = path.read_bytes() + text = raw.decode("utf-8") + except (OSError, UnicodeError) as exc: + raise ArticleEditorError(f"cannot read {path}: {exc}") from exc + return LrDocument.parse(text, str(path)), raw + + def _load_tags(self) -> list[Tag]: + tags: list[Tag] = [] + for directory in sorted(self.tags_root.iterdir(), key=lambda item: item.name): + if not directory.is_dir(): + continue + slug = directory.name + if not SLUG_RE.fullmatch(slug): + raise ArticleEditorError(f"invalid controlled tag directory name: {slug}") + record_path = directory / "contents.lr" + if not record_path.is_file(): + raise ArticleEditorError(f"controlled tag is missing contents.lr: {directory}") + self._ensure_within(record_path, self.tags_root) + document, _raw = self._read_document(record_path) + if document.get("_model") != "tag" or not document.get("title").strip(): + raise ArticleEditorError(f"malformed controlled tag record: {record_path}") + tags.append(Tag(slug, document.get("title").strip())) + if not tags: + raise ArticleEditorError("content/tags contains no controlled tag records") + return tags + + @staticmethod + def _ensure_within(path: Path, parent: Path) -> Path: + resolved = path.resolve() + if not resolved.is_relative_to(parent.resolve()): + raise ArticleEditorError(f"unsafe path outside {parent}: {path}") + return resolved + + def list_entries(self) -> list[ArticleEntry]: + entries: list[ArticleEntry] = [] + for directory in self.article_root.iterdir(): + if not directory.is_dir(): + continue + record_path = directory / "contents.lr" + if not record_path.is_file(): + continue + entries.append(self.load_entry(directory.name)) + entries.sort(key=lambda entry: (entry.publication_date, entry.title), reverse=True) + return entries + + def load_entry(self, slug: str) -> ArticleEntry: + self._validate_slug(slug) + path = self._ensure_within(self.article_root / slug / "contents.lr", self.article_root) + if not path.is_file(): + raise ArticleEditorError(f"article entry does not exist: {slug}") + document, raw = self._read_document(path) + self._validate_loaded_entry(document, slug) + return ArticleEntry(slug, path, document, raw) + + def _validate_loaded_entry(self, document: LrDocument, slug: str) -> None: + if document.get("_model") != "entry": + raise ArticleEditorError(f"content/articles/{slug} is not an entry record") + if document.get("kicker") != "Article": + raise ArticleEditorError(f"content/articles/{slug} does not use the Article kicker") + self.validate_values(self.values_for(document)) + + @staticmethod + def _validate_slug(slug: str) -> None: + if not SLUG_RE.fullmatch(slug): + raise ArticleEditorError( + "slug must contain lowercase letters, numbers, and single hyphens only" + ) + + @staticmethod + def _validate_iso_date(value: str, label: str, required: bool) -> str: + value = value.strip() + if not value and not required: + return "" + if not value: + raise ArticleEditorError(f"{label} is required") + try: + parsed = current_date.fromisoformat(value) + except ValueError as exc: + raise ArticleEditorError(f"{label} must use YYYY-MM-DD") from exc + if parsed.isoformat() != value: + raise ArticleEditorError(f"{label} must use YYYY-MM-DD") + return value + + @staticmethod + def _validate_url(value: str, label: str) -> str: + value = value.strip() + if not value: + return "" + parsed = urlsplit(value) + if parsed.scheme not in {"http", "https"} or not parsed.netloc: + raise ArticleEditorError(f"{label} must be a complete HTTP or HTTPS URL") + return value + + def validate_values(self, values: dict[str, str]) -> dict[str, str]: + cleaned = {key: value for key, value in values.items()} + for required in ("title", "summary", "body"): + cleaned[required] = cleaned.get(required, "") + if not cleaned[required].strip(): + raise ArticleEditorError(f"{required.replace('_', ' ').title()} is required") + cleaned["title"] = cleaned["title"].strip() + cleaned["author"] = cleaned.get("author", "").strip() + cleaned["date"] = self._validate_iso_date( + cleaned.get("date", ""), "Publication date", True + ) + cleaned["updated"] = self._validate_iso_date( + cleaned.get("updated", ""), "Updated date", False + ) + cleaned["kicker"] = cleaned.get("kicker", "").strip() + if cleaned["kicker"] != "Article": + raise ArticleEditorError("Kicker must be Article") + + approved_tags = {tag.slug for tag in self.tags} + selected_tags = [ + tag.strip() + for tag in re.split(r"[,\n]", cleaned.get("tags", "")) + if tag.strip() + ] + unknown_tags = sorted(set(selected_tags) - approved_tags) + if unknown_tags: + raise ArticleEditorError( + "unapproved tag slug(s): " + ", ".join(unknown_tags) + ) + cleaned["tags"] = ", ".join(dict.fromkeys(selected_tags)) + cleaned["external_url"] = self._validate_url( + cleaned.get("external_url", ""), "External URL" + ) + published = [ + self._validate_url(line, "Each published URL") + for line in cleaned.get("published_urls", "").splitlines() + if line.strip() + ] + cleaned["published_urls"] = "\n".join(published) + cleaned["title"] = cleaned["title"].replace("\r", "").replace("\n", " ") + cleaned["author"] = cleaned["author"].replace("\r", "").replace("\n", " ") + cleaned["summary"] = cleaned["summary"].replace("\r\n", "\n") + cleaned["body"] = cleaned["body"].replace("\r\n", "\n") + return cleaned + + @staticmethod + def values_for(document: LrDocument) -> dict[str, str]: + tags = ", ".join( + part.strip() + for part in re.split(r"[,\n]", document.get("tags")) + if part.strip() + ) + published_urls = "\n".join( + line.strip() + for line in document.get("published_urls").splitlines() + if line.strip() + ) + return { + "title": document.get("title"), + "date": document.get("date"), + "updated": document.get("updated"), + "author": document.get("author"), + "tags": tags, + "kicker": document.get("kicker"), + "summary": document.get("summary"), + "body": document.get("body"), + "external_url": document.get("external_url"), + "published_urls": published_urls, + } + + def create_entry(self, slug: str, values: dict[str, str]) -> ArticleEntry: + self._validate_slug(slug) + values = self.validate_values(values) + directory = self.article_root / slug + destination = directory / "contents.lr" + self._ensure_within(destination, self.article_root) + if directory.exists(): + raise ArticleEditorError(f"content/articles/{slug} already exists") + + document = LrDocument.parse( + "_model: entry\n---\ntitle: placeholder\n", str(destination) + ) + self._apply_values(document, values, creating=True) + payload = document.render().encode("utf-8") + try: + directory.mkdir() + with destination.open("xb") as output: + output.write(payload) + output.flush() + os.fsync(output.fileno()) + except (OSError, FileExistsError) as exc: + try: + if directory.is_dir() and not any(directory.iterdir()): + directory.rmdir() + except OSError: + pass + raise ArticleEditorError(f"cannot create {destination}: {exc}") from exc + return self.load_entry(slug) + + def save_entry(self, entry: ArticleEntry, values: dict[str, str]) -> ArticleEntry: + values = self.validate_values(values) + destination = self._ensure_within(entry.path, self.article_root) + temporary: Path | None = None + try: + current = destination.read_bytes() + except OSError as exc: + raise ArticleEditorError(f"cannot re-read {destination}: {exc}") from exc + if current != entry.original_bytes: + raise ArticleEditorError( + "the entry changed on disk after it was loaded; reload it before saving" + ) + + self._apply_values(entry.document, values, creating=False) + payload = entry.document.render().encode("utf-8") + if payload == current: + return entry + try: + with tempfile.NamedTemporaryFile( + mode="wb", prefix=".contents.lr.", dir=destination.parent, delete=False + ) as output: + temporary = Path(output.name) + output.write(payload) + output.flush() + os.fsync(output.fileno()) + os.chmod(temporary, destination.stat().st_mode) + os.replace(temporary, destination) + except OSError as exc: + try: + if temporary is not None: + temporary.unlink(missing_ok=True) + except OSError: + pass + raise ArticleEditorError(f"cannot save {destination}: {exc}") from exc + return self.load_entry(entry.slug) + + def delete_entry(self, entry: ArticleEntry) -> None: + self._validate_slug(entry.slug) + directory = self._ensure_within(entry.path.parent, self.article_root) + destination = self._ensure_within(entry.path, self.article_root) + if directory.parent != self.article_root or directory.name != entry.slug: + raise ArticleEditorError(f"unsafe article entry directory: {directory}") + if directory.is_symlink() or getattr(directory, "is_junction", lambda: False)(): + raise ArticleEditorError(f"refusing to delete linked directory: {directory}") + try: + current = destination.read_bytes() + except OSError as exc: + raise ArticleEditorError(f"cannot re-read {destination}: {exc}") from exc + if current != entry.original_bytes: + raise ArticleEditorError( + "the entry changed on disk after it was loaded; reload it before deleting" + ) + for child in directory.rglob("*"): + if child.is_symlink() or getattr(child, "is_junction", lambda: False)(): + raise ArticleEditorError( + f"refusing to delete an entry containing a linked path: {child}" + ) + try: + shutil.rmtree(directory) + except OSError as exc: + raise ArticleEditorError(f"cannot delete {directory}: {exc}") from exc + + def narration_file(self, entry: ArticleEntry) -> Path: + return self._ensure_within(narration_path(entry.path.parent), self.article_root) + + def import_narration(self, entry: ArticleEntry, source: Path) -> Path: + directory = self._ensure_within(entry.path.parent, self.article_root) + if not entry.path.is_file(): + raise ArticleEditorError(f"article entry does not exist: {entry.slug}") + try: + return import_wav( + directory, source, fallback_ffmpeg=self.site_root / "support" / "ffmpeg.exe" + ) + except NarrationImportError as exc: + raise ArticleEditorError(str(exc)) from exc + + def remove_narration(self, entry: ArticleEntry) -> bool: + directory = self._ensure_within(entry.path.parent, self.article_root) + try: + return remove_narration(directory) + except NarrationImportError as exc: + raise ArticleEditorError(str(exc)) from exc + + def cover_image(self, entry: ArticleEntry) -> CoverImage | None: + match = COVER_IMAGE_RE.match(entry.document.get("body")) + if match is None: + return None + path = self._ensure_within(entry.path.parent / match["name"], entry.path.parent) + if not path.is_file(): + raise ArticleEditorError( + f"article cover image is referenced but missing: {path.name}" + ) + return CoverImage(match["name"], match["alt"], path) + + @staticmethod + def cover_body(body: str, image_name: str, alt: str) -> str: + match = COVER_IMAGE_RE.match(body) + if match is not None: + return f"![{alt}]({image_name})\n\n" + body[match.end() :] + return f"![{alt}]({image_name})\n\n{body.lstrip()}" + + @staticmethod + def remove_cover_body(body: str) -> str: + match = COVER_IMAGE_RE.match(body) + if match is None: + return body + return body[match.end() :] + + def add_or_replace_cover( + self, entry: ArticleEntry, source: Path, alt: str, replace: bool + ) -> tuple[ArticleEntry, CoverImage]: + source = source.resolve() + if not source.is_file(): + raise ArticleEditorError(f"selected image does not exist: {source}") + suffix = source.suffix.lower() + if suffix not in IMAGE_SUFFIXES: + raise ArticleEditorError("cover image must be a PNG, JPG, or JPEG file") + destination = self._ensure_within( + entry.path.parent / f"cover-image{suffix}", entry.path.parent + ) + current_cover = self.cover_image(entry) + if destination.exists() and not replace: + raise ArticleEditorError( + f"{destination.name} already exists; confirm replacement before overwriting it" + ) + if current_cover is not None and current_cover.path != destination and not replace: + raise ArticleEditorError( + "the article already has a cover image; confirm replacement before changing it" + ) + + temporary: Path | None = None + try: + with source.open("rb") as image_input, tempfile.NamedTemporaryFile( + mode="wb", prefix=".cover-image.", dir=entry.path.parent, delete=False + ) as output: + temporary = Path(output.name) + shutil.copyfileobj(image_input, output) + output.flush() + os.fsync(output.fileno()) + os.replace(temporary, destination) + except OSError as exc: + if temporary is not None: + temporary.unlink(missing_ok=True) + raise ArticleEditorError(f"cannot copy cover image: {exc}") from exc + + values = self.values_for(entry.document) + values["body"] = self.cover_body(values["body"], destination.name, alt.strip()) + try: + saved = self.save_entry(entry, values) + except ArticleEditorError: + raise + if current_cover is not None and current_cover.path != destination: + try: + current_cover.path.unlink() + except OSError as exc: + raise ArticleEditorError( + f"new cover saved but could not remove old cover {current_cover.path.name}: {exc}" + ) from exc + return saved, CoverImage(destination.name, alt.strip(), destination) + + def remove_cover(self, entry: ArticleEntry, remove_file: bool) -> ArticleEntry: + cover = self.cover_image(entry) + if cover is None: + raise ArticleEditorError("the loaded article has no managed cover image") + values = self.values_for(entry.document) + values["body"] = self.remove_cover_body(values["body"]) + saved = self.save_entry(entry, values) + if remove_file: + try: + cover.path.unlink() + except OSError as exc: + raise ArticleEditorError( + f"cover reference removed but could not remove {cover.path.name}: {exc}" + ) from exc + return saved + + @staticmethod + def _apply_values( + document: LrDocument, values: dict[str, str], creating: bool + ) -> None: + existing = ArticleRepository.values_for(document) if not creating else {} + styles = { + "summary": "multiline" if "\n" in values["summary"] else "scalar", + "body": "multiline", + "published_urls": "published_urls", + } + optional = {"updated", "tags", "external_url"} + for key in FIELD_ORDER[1:]: + value = values.get(key, "") + if not creating and existing.get(key, "") == value: + continue + if key in optional and not value: + document.remove_field(key) + continue + if key == "published_urls" or value or creating: + document.set_field(key, value, styles.get(key, "scalar")) + + +def suggest_slug(title: str) -> str: + normalized = unicodedata.normalize("NFKD", title).encode("ascii", "ignore").decode() + return re.sub(r"[^a-z0-9]+", "-", normalized.lower()).strip("-") + + +def run_gui(repository: ArticleRepository) -> None: + try: + import tkinter as tk + from tkinter import filedialog, messagebox, ttk + except ImportError as exc: + raise ArticleEditorError( + "Tkinter is not available in this Python installation" + ) from exc + + class ArticleEditorApp: + def __init__(self) -> None: + self.root = tk.Tk() + self.root.title("Labyricorn Article Editor") + self.root.geometry("1240x860") + self.root.minsize(980, 680) + self.current_entry: ArticleEntry | None = None + self.mode = "new" + self.snapshot: dict[str, str] | None = None + + pane = ttk.Panedwindow(self.root, orient=tk.HORIZONTAL) + pane.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + browser = ttk.Frame(pane, padding=5) + form = ttk.Frame(pane, padding=5) + pane.add(browser, weight=1) + pane.add(form, weight=3) + + columns = ("date", "title", "slug") + self.tree = ttk.Treeview(browser, columns=columns, show="headings") + self.tree.heading("date", text="Date") + self.tree.heading("title", text="Title") + self.tree.heading("slug", text="Slug") + self.tree.column("date", width=90, stretch=False) + self.tree.column("title", width=210) + self.tree.column("slug", width=180) + tree_scroll = ttk.Scrollbar(browser, orient=tk.VERTICAL, command=self.tree.yview) + self.tree.configure(yscrollcommand=tree_scroll.set) + self.tree.grid(row=0, column=0, columnspan=3, sticky="nsew") + tree_scroll.grid(row=0, column=3, sticky="ns") + browser.rowconfigure(0, weight=1) + browser.columnconfigure(0, weight=1) + ttk.Button(browser, text="New", command=self.new_entry).grid( + row=1, column=0, sticky="ew", pady=(8, 0) + ) + ttk.Button(browser, text="Edit selected", command=self.edit_selected).grid( + row=1, column=1, sticky="ew", padx=5, pady=(8, 0) + ) + ttk.Button(browser, text="Refresh", command=self.refresh).grid( + row=1, column=2, sticky="ew", pady=(8, 0) + ) + self.tree.bind("", lambda _event: self.edit_selected()) + + self.title_var = tk.StringVar() + self.slug_var = tk.StringVar() + self.date_var = tk.StringVar() + self.updated_var = tk.StringVar() + self.author_var = tk.StringVar() + self.kicker_var = tk.StringVar(value="Article") + self.external_url_var = tk.StringVar() + self.status_var = tk.StringVar() + self.cover_var = tk.StringVar(value="No cover image") + self.pending_cover: Path | None = None + self.remove_cover_requested = False + + form.columnconfigure(1, weight=1) + form.columnconfigure(3, weight=1) + form.rowconfigure(10, weight=1) + ttk.Label(form, text="Title").grid(row=0, column=0, sticky="w") + ttk.Entry(form, textvariable=self.title_var).grid( + row=0, column=1, columnspan=3, sticky="ew", pady=3 + ) + ttk.Label(form, text="Slug").grid(row=1, column=0, sticky="w") + self.slug_entry = ttk.Entry(form, textvariable=self.slug_var) + self.slug_entry.grid(row=1, column=1, columnspan=2, sticky="ew", pady=3) + ttk.Button(form, text="Suggest", command=self.fill_suggested_slug).grid( + row=1, column=3, sticky="e", padx=(5, 0) + ) + ttk.Label(form, text="Publication date").grid(row=2, column=0, sticky="w") + ttk.Entry(form, textvariable=self.date_var, width=16).grid( + row=2, column=1, sticky="ew", pady=3 + ) + ttk.Label(form, text="Updated date").grid( + row=2, column=2, sticky="w", padx=(12, 0) + ) + ttk.Entry(form, textvariable=self.updated_var, width=16).grid( + row=2, column=3, sticky="ew", pady=3 + ) + ttk.Label(form, text="Author").grid(row=3, column=0, sticky="w") + ttk.Entry(form, textvariable=self.author_var).grid( + row=3, column=1, sticky="ew", pady=3 + ) + ttk.Label(form, text="Type").grid(row=3, column=2, sticky="w", padx=(12, 0)) + ttk.Combobox( + form, textvariable=self.kicker_var, values=("Article",), state="readonly" + ).grid(row=3, column=3, sticky="ew", pady=3) + ttk.Label(form, text="External URL").grid(row=4, column=0, sticky="w") + ttk.Entry(form, textvariable=self.external_url_var).grid( + row=4, column=1, columnspan=3, sticky="ew", pady=3 + ) + + ttk.Label(form, text="Cover image").grid(row=5, column=0, sticky="w") + cover_frame = ttk.Frame(form) + cover_frame.grid(row=5, column=1, columnspan=3, sticky="ew", pady=3) + cover_frame.columnconfigure(0, weight=1) + ttk.Label(cover_frame, textvariable=self.cover_var).grid(row=0, column=0, sticky="w") + ttk.Button(cover_frame, text="Choose…", command=self.choose_cover).grid( + row=0, column=1, padx=(8, 0) + ) + self.remove_cover_button = ttk.Button( + cover_frame, text="Remove", command=self.request_cover_removal, state="disabled" + ) + self.remove_cover_button.grid(row=0, column=2, padx=(8, 0)) + ttk.Label(form, text="Narration").grid(row=6, column=0, sticky="w") + narration_frame = ttk.Frame(form) + narration_frame.grid(row=6, column=1, columnspan=3, sticky="ew", pady=3) + narration_frame.columnconfigure(0, weight=1) + self.narration_var = tk.StringVar(value="Narration: None") + ttk.Label(narration_frame, textvariable=self.narration_var).grid(row=0, column=0, sticky="w") + self.choose_narration_button = ttk.Button( + narration_frame, text="Choose Narration WAV…", command=self.choose_narration, state="disabled" + ) + self.choose_narration_button.grid(row=0, column=1, padx=(8, 0)) + self.remove_narration_button = ttk.Button( + narration_frame, text="Remove", command=self.remove_current_narration, state="disabled" + ) + self.remove_narration_button.grid(row=0, column=2, padx=(8, 0)) + ttk.Label(form, text="Summary").grid(row=7, column=0, sticky="nw", pady=(5, 0)) + self.summary_text = tk.Text(form, height=3, wrap="word", undo=True) + self.summary_text.grid(row=7, column=1, columnspan=3, sticky="nsew", pady=3) + ttk.Label(form, text="Published URLs\n(one per line)").grid( + row=8, column=0, sticky="nw", pady=(5, 0) + ) + self.published_text = tk.Text(form, height=3, wrap="none", undo=True) + self.published_text.grid(row=8, column=1, columnspan=3, sticky="nsew", pady=3) + ttk.Label(form, text="Controlled tags").grid( + row=9, column=0, sticky="nw", pady=(5, 0) + ) + tag_frame = ttk.Frame(form) + tag_frame.grid(row=9, column=1, columnspan=3, sticky="nsew", pady=3) + tag_frame.columnconfigure(0, weight=1) + self.tag_list = tk.Listbox( + tag_frame, height=6, selectmode=tk.EXTENDED, exportselection=False + ) + tag_scroll = ttk.Scrollbar(tag_frame, orient=tk.VERTICAL, command=self.tag_list.yview) + self.tag_list.configure(yscrollcommand=tag_scroll.set) + self.tag_list.grid(row=0, column=0, sticky="nsew") + tag_scroll.grid(row=0, column=1, sticky="ns") + for tag in repository.tags: + self.tag_list.insert(tk.END, f"{tag.title} ({tag.slug})") + + ttk.Label(form, text="Body (Markdown)").grid( + row=10, column=0, sticky="nw", pady=(5, 0) + ) + body_frame = ttk.Frame(form) + body_frame.grid(row=10, column=1, columnspan=3, sticky="nsew", pady=3) + body_frame.rowconfigure(0, weight=1) + body_frame.columnconfigure(0, weight=1) + self.body_text = tk.Text(body_frame, wrap="word", undo=True) + body_scroll = ttk.Scrollbar(body_frame, orient=tk.VERTICAL, command=self.body_text.yview) + self.body_text.configure(yscrollcommand=body_scroll.set) + self.body_text.grid(row=0, column=0, sticky="nsew") + body_scroll.grid(row=0, column=1, sticky="ns") + + footer = ttk.Frame(form) + footer.grid(row=11, column=0, columnspan=4, sticky="ew", pady=(8, 0)) + footer.columnconfigure(0, weight=1) + ttk.Label(footer, textvariable=self.status_var).grid(row=0, column=0, sticky="w") + self.delete_button = ttk.Button( + footer, text="Delete entry", command=self.delete_current, state="disabled" + ) + self.delete_button.grid(row=0, column=1, sticky="e", padx=(0, 8)) + ttk.Button(footer, text="Save entry", command=self.save).grid( + row=0, column=2, sticky="e" + ) + + self.root.bind("", lambda _event: self.save()) + self.root.protocol("WM_DELETE_WINDOW", self.close) + self.refresh(preserve_selection=False) + self.new_entry(confirm=False) + + def collect_values(self) -> dict[str, str]: + selected = [repository.tags[index].slug for index in self.tag_list.curselection()] + return { + "title": self.title_var.get(), + "date": self.date_var.get(), + "updated": self.updated_var.get(), + "author": self.author_var.get(), + "tags": ", ".join(selected), + "kicker": self.kicker_var.get(), + "summary": self.summary_text.get("1.0", "end-1c"), + "body": self.body_text.get("1.0", "end-1c"), + "external_url": self.external_url_var.get(), + "published_urls": self.published_text.get("1.0", "end-1c"), + } + + def set_values(self, values: dict[str, str]) -> None: + self.title_var.set(values.get("title", "")) + self.date_var.set(values.get("date", "")) + self.updated_var.set(values.get("updated", "")) + self.author_var.set(values.get("author", "")) + self.kicker_var.set("Article") + self.external_url_var.set(values.get("external_url", "")) + for widget, key in ( + (self.summary_text, "summary"), + (self.published_text, "published_urls"), + (self.body_text, "body"), + ): + widget.delete("1.0", tk.END) + widget.insert("1.0", values.get(key, "")) + selected = { + part.strip() for part in values.get("tags", "").split(",") if part.strip() + } + self.tag_list.selection_clear(0, tk.END) + for index, tag in enumerate(repository.tags): + if tag.slug in selected: + self.tag_list.selection_set(index) + + def has_unsaved_changes(self) -> bool: + return self.snapshot is not None and self.collect_values() != self.snapshot + + def may_discard(self) -> bool: + return not self.has_unsaved_changes() or messagebox.askyesno( + "Discard changes?", "Discard the unsaved changes in the current form?" + ) + + def refresh(self, preserve_selection: bool = True) -> None: + selected = self.tree.selection()[0] if preserve_selection and self.tree.selection() else None + self.tree.delete(*self.tree.get_children()) + try: + entries = repository.list_entries() + except ArticleEditorError as exc: + messagebox.showerror("Cannot load article entries", str(exc)) + return + for entry in entries: + self.tree.insert( + "", tk.END, iid=entry.slug, values=(entry.publication_date, entry.title, entry.slug) + ) + if selected and self.tree.exists(selected): + self.tree.selection_set(selected) + self.status_var.set(f"{len(entries)} article entries") + + def new_entry(self, confirm: bool = True) -> None: + if confirm and not self.may_discard(): + return + self.mode = "new" + self.current_entry = None + self.delete_button.configure(state="disabled") + self.slug_entry.configure(state="normal") + self.slug_var.set("") + self.set_values( + { + "date": current_date.today().isoformat(), + "author": "Christopher Chambers", + "kicker": "Article", + } + ) + self.snapshot = self.collect_values() + self.status_var.set("Creating a new article entry") + self.pending_cover = None + self.remove_cover_requested = False + self.cover_var.set("No cover image") + self.remove_cover_button.configure(state="disabled") + self.narration_var.set("Narration: save this entry before adding narration") + self.choose_narration_button.configure(state="disabled") + self.remove_narration_button.configure(state="disabled") + + def edit_selected(self) -> None: + selection = self.tree.selection() + if not selection: + messagebox.showinfo("Select an entry", "Select a article entry to edit.") + return + if not self.may_discard(): + return + try: + entry = repository.load_entry(selection[0]) + except ArticleEditorError as exc: + messagebox.showerror("Cannot load entry", str(exc)) + return + self.mode = "edit" + self.current_entry = entry + self.delete_button.configure(state="normal") + self.slug_var.set(entry.slug) + self.slug_entry.configure(state="readonly") + self.set_values(repository.values_for(entry.document)) + self.pending_cover = None + self.remove_cover_requested = False + try: + cover = repository.cover_image(entry) + except ArticleEditorError as exc: + messagebox.showerror("Cannot load cover image", str(exc)) + return + if cover is None: + self.cover_var.set("No cover image") + self.remove_cover_button.configure(state="disabled") + else: + self.cover_var.set(f"{cover.name} — {cover.alt or 'no alt text'}") + self.remove_cover_button.configure(state="normal") + self.update_narration_status() + self.snapshot = self.collect_values() + self.status_var.set(f"Editing content/articles/{entry.slug}/contents.lr") + + def fill_suggested_slug(self) -> None: + if self.mode != "new": + return + self.slug_var.set(suggest_slug(self.title_var.get())) + + def update_narration_status(self) -> None: + if self.current_entry is None: + self.narration_var.set("Narration: None") + self.choose_narration_button.configure(state="disabled") + self.remove_narration_button.configure(state="disabled") + return + narration = repository.narration_file(self.current_entry) + exists = narration.is_file() + self.narration_var.set("Narration: narration.mp3" if exists else "Narration: None") + self.choose_narration_button.configure(state="normal") + self.remove_narration_button.configure(state="normal" if exists else "disabled") + + def choose_narration(self) -> None: + if self.current_entry is None: + return + selected = filedialog.askopenfilename( + title="Choose narration WAV file", + filetypes=[("WAV audio", "*.wav"), ("All files", "*.*")], + ) + if not selected: + return + destination = repository.narration_file(self.current_entry) + if destination.is_file() and not messagebox.askyesno( + "Replace narration?", + "Replace the existing narration.mp3 for this article entry?", + icon="warning", + ): + return + try: + repository.import_narration(self.current_entry, Path(selected)) + except ArticleEditorError as exc: + messagebox.showerror("Cannot import narration", str(exc)) + return + self.update_narration_status() + self.status_var.set(f"Imported narration.mp3 for {self.current_entry.slug}") + + def remove_current_narration(self) -> None: + if self.current_entry is None: + return + if not messagebox.askyesno( + "Remove narration?", + "Remove narration.mp3 from this article entry?", + icon="warning", + ): + return + try: + repository.remove_narration(self.current_entry) + except ArticleEditorError as exc: + messagebox.showerror("Cannot remove narration", str(exc)) + return + self.update_narration_status() + self.status_var.set(f"Removed narration.mp3 from {self.current_entry.slug}") + + def choose_cover(self) -> None: + selected = filedialog.askopenfilename( + title="Choose article cover image", + filetypes=[("Images", "*.png *.jpg *.jpeg"), ("All files", "*.*")], + ) + if not selected: + return + source = Path(selected) + if source.suffix.lower() not in IMAGE_SUFFIXES: + messagebox.showerror("Unsupported cover image", "Choose a PNG, JPG, or JPEG file.") + return + has_cover = self.current_entry is not None and repository.cover_image(self.current_entry) + if has_cover or self.pending_cover is not None: + if not messagebox.askyesno( + "Replace cover image?", + "Replacing the cover will overwrite the existing canonical cover file " + "when saved. Continue?", + icon="warning", + ): + return + self.pending_cover = source + self.remove_cover_requested = False + self.cover_var.set(f"Will copy {source.name} when saved") + self.remove_cover_button.configure(state="normal") + + def request_cover_removal(self) -> None: + if self.pending_cover is not None: + self.pending_cover = None + self.cover_var.set("No cover image") + self.remove_cover_button.configure(state="disabled") + return + if self.current_entry is None: + return + try: + cover = repository.cover_image(self.current_entry) + except ArticleEditorError as exc: + messagebox.showerror("Cannot inspect cover image", str(exc)) + return + if cover is None: + return + if not messagebox.askyesno( + "Remove cover image?", + f"Remove the {cover.name} reference and delete that article-local file?", + icon="warning", + ): + return + self.remove_cover_requested = True + self.cover_var.set(f"Will remove {cover.name} when saved") + + def save(self) -> None: + try: + values = self.collect_values() + if self.mode == "new": + entry = repository.create_entry(self.slug_var.get().strip(), values) + else: + if self.current_entry is None: + raise ArticleEditorError("no article entry is loaded") + entry = repository.save_entry(self.current_entry, values) + if self.pending_cover is not None: + entry, _cover = repository.add_or_replace_cover( + entry, self.pending_cover, "Article cover image", replace=True + ) + elif self.remove_cover_requested: + entry = repository.remove_cover(entry, remove_file=True) + except ArticleEditorError as exc: + messagebox.showerror("Cannot save entry", str(exc)) + return + self.mode = "edit" + self.current_entry = entry + self.delete_button.configure(state="normal") + self.slug_var.set(entry.slug) + self.slug_entry.configure(state="readonly") + self.set_values(repository.values_for(entry.document)) + self.pending_cover = None + self.remove_cover_requested = False + cover = repository.cover_image(entry) + if cover is None: + self.cover_var.set("No cover image") + self.remove_cover_button.configure(state="disabled") + else: + self.cover_var.set(f"{cover.name} — {cover.alt or 'no alt text'}") + self.remove_cover_button.configure(state="normal") + self.update_narration_status() + self.snapshot = self.collect_values() + self.refresh(preserve_selection=False) + self.tree.selection_set(entry.slug) + self.tree.see(entry.slug) + self.status_var.set(f"Saved content/articles/{entry.slug}/contents.lr") + + def delete_current(self) -> None: + if self.mode != "edit" or self.current_entry is None: + return + entry = self.current_entry + try: + additional_files = sum( + 1 + for path in entry.path.parent.rglob("*") + if path.is_file() and path != entry.path + ) + except OSError as exc: + messagebox.showerror("Cannot inspect entry", str(exc)) + return + attachment_note = ( + f" It also contains {additional_files} additional file(s)." + if additional_files + else "" + ) + unsaved_note = ( + " Unsaved form changes will be discarded." if self.has_unsaved_changes() else "" + ) + confirmed = messagebox.askyesno( + "Delete article entry?", + f"Delete {entry.title!r} ({entry.slug}) from the working tree?" + f"{attachment_note}{unsaved_note}\n\n" + "This removes the complete entry directory. The deletion can be reviewed " + "and recovered with Git until it is committed.", + icon="warning", + ) + if not confirmed: + return + try: + repository.delete_entry(entry) + except ArticleEditorError as exc: + messagebox.showerror("Cannot delete entry", str(exc)) + return + deleted_slug = entry.slug + self.snapshot = None + self.refresh(preserve_selection=False) + self.new_entry(confirm=False) + self.status_var.set(f"Deleted content/articles/{deleted_slug} from the working tree") + + def close(self) -> None: + if self.may_discard(): + self.root.destroy() + + try: + app = ArticleEditorApp() + except tk.TclError as exc: + raise ArticleEditorError(f"cannot open the Tkinter window: {exc}") from exc + app.root.mainloop() + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--site-root", type=Path, default=Path(__file__).resolve().parents[1] + ) + args = parser.parse_args() + try: + repository = ArticleRepository(args.site_root) + run_gui(repository) + except ArticleEditorError as exc: + parser.exit(1, f"article-editor: ERROR: {exc}\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/blog_editor.py b/scripts/blog_editor.py new file mode 100644 index 0000000..721d31a --- /dev/null +++ b/scripts/blog_editor.py @@ -0,0 +1,959 @@ +#!/usr/bin/env python3 +"""Small, blog-specific desktop editor for Labyricorn Lektor records.""" + +from __future__ import annotations + +import argparse +import configparser +from dataclasses import dataclass +from datetime import date as current_date +import os +from pathlib import Path +import re +import shutil +import tempfile +import unicodedata +from urllib.parse import urlsplit + +from narration_import import NarrationImportError, import_wav, narration_path, remove_narration + + +SLUG_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") +SEPARATOR_RE = re.compile(r"(?m)(^---[ \t]*(?:\r\n|\n|$))") +FIELD_RE = re.compile(r"([A-Za-z_][A-Za-z0-9_-]*):(.*)") +FIELD_ORDER = ( + "_model", + "title", + "date", + "updated", + "author", + "tags", + "kicker", + "summary", + "external_url", + "published_urls", + "body", +) +EXPECTED_MODEL_FIELDS = { + "title": "string", + "date": "date", + "updated": "date", + "author": "string", + "tags": "checkboxes", + "kicker": "select", + "summary": "text", + "body": "markdown", + "external_url": "url", + "published_urls": "strings", +} + + +class BlogEditorError(Exception): + """An error that can be shown directly to an editor user.""" + + +@dataclass(frozen=True) +class Tag: + slug: str + title: str + + +@dataclass +class LrDocument: + blocks: list[str] + delimiters: list[str] + newline: str + source: str + + @classmethod + def parse(cls, text: str, source: str) -> "LrDocument": + parts = SEPARATOR_RE.split(text) + blocks = [parts[0]] + delimiters: list[str] = [] + for index in range(1, len(parts), 2): + delimiters.append(parts[index]) + blocks.append(parts[index + 1]) + + if not blocks or any(not block.strip() for block in blocks): + raise BlogEditorError(f"{source}: empty or malformed record block") + newline = "\r\n" if "\r\n" in text else "\n" + document = cls(blocks, delimiters, newline, source) + document._field_indexes() + return document + + def render(self) -> str: + pieces = [self.blocks[0]] + for delimiter, block in zip(self.delimiters, self.blocks[1:]): + pieces.extend((delimiter, block)) + return "".join(pieces) + + def _field_indexes(self) -> dict[str, int]: + indexes: dict[str, int] = {} + for index, block in enumerate(self.blocks): + key, _value = self._parse_block(block) + if key in indexes: + raise BlogEditorError(f"{self.source}: duplicate field {key!r}") + indexes[key] = index + return indexes + + def _parse_block(self, block: str) -> tuple[str, str]: + line_end = block.find("\n") + if line_end < 0: + first_line = block + remainder = "" + else: + first_line = block[:line_end].rstrip("\r") + remainder = block[line_end + 1 :] + match = FIELD_RE.fullmatch(first_line) + if match is None: + raise BlogEditorError(f"{self.source}: malformed field header {first_line!r}") + key, inline = match.groups() + if inline.startswith(" "): + inline = inline[1:] + if inline: + value = inline + if remainder.rstrip("\r\n"): + value += "\n" + remainder.rstrip("\r\n") + else: + value = remainder.rstrip("\r\n") + return key, value + + def get(self, key: str, default: str = "") -> str: + index = self._field_indexes().get(key) + if index is None: + return default + return self._parse_block(self.blocks[index])[1] + + def set_field(self, key: str, value: str, style: str = "scalar") -> None: + indexes = self._field_indexes() + current_index = indexes.get(key) + if current_index is not None and self.get(key) == value: + return + rendered = self._render_field(key, value, style) + if current_index is not None: + self.blocks[current_index] = rendered + return + + desired_order = FIELD_ORDER.index(key) + insertion_index = len(self.blocks) + for candidate, index in indexes.items(): + if candidate in FIELD_ORDER and FIELD_ORDER.index(candidate) > desired_order: + insertion_index = min(insertion_index, index) + self.blocks.insert(insertion_index, rendered) + delimiter = f"---{self.newline}" + if insertion_index == 0: + self.delimiters.insert(0, delimiter) + else: + self.delimiters.insert(insertion_index - 1, delimiter) + + def remove_field(self, key: str) -> None: + index = self._field_indexes().get(key) + if index is None: + return + if index == 0: + raise BlogEditorError(f"{self.source}: cannot remove the first record field") + del self.blocks[index] + del self.delimiters[index - 1] + + def _render_field(self, key: str, value: str, style: str) -> str: + if style == "published_urls": + lines = [line.strip() for line in value.splitlines() if line.strip()] + suffix = self.newline.join(lines) + if suffix: + suffix += self.newline + return f"{key}:{self.newline}{self.newline}{suffix}" + if style == "multiline" or "\n" in value: + suffix = value.rstrip("\r\n") + if suffix: + suffix += self.newline + return f"{key}:{self.newline}{suffix}" + return f"{key}: {value}{self.newline}" + + +@dataclass +class BlogEntry: + slug: str + path: Path + document: LrDocument + original_bytes: bytes + + @property + def title(self) -> str: + return self.document.get("title") + + @property + def publication_date(self) -> str: + return self.document.get("date") + + +class BlogRepository: + def __init__(self, site_root: Path): + self.site_root = site_root.resolve() + self.blog_root = (self.site_root / "content" / "blog").resolve() + self.tags_root = (self.site_root / "content" / "tags").resolve() + self._validate_layout() + self.tags = self._load_tags() + + def _validate_layout(self) -> None: + project_files = list(self.site_root.glob("*.lektorproject")) + if len(project_files) != 1: + raise BlogEditorError( + f"{self.site_root}: expected exactly one .lektorproject file" + ) + if not self.blog_root.is_dir() or not (self.blog_root / "contents.lr").is_file(): + raise BlogEditorError(f"missing Lektor blog section at {self.blog_root}") + if not self.tags_root.is_dir(): + raise BlogEditorError(f"missing controlled tag records at {self.tags_root}") + + model_path = self.site_root / "models" / "entry.ini" + parser = configparser.ConfigParser(interpolation=None) + try: + with model_path.open("r", encoding="utf-8") as model_file: + parser.read_file(model_file) + except (OSError, UnicodeError, configparser.Error) as exc: + raise BlogEditorError(f"cannot read blog entry model {model_path}: {exc}") from exc + + actual_fields = { + section.removeprefix("fields."): parser.get(section, "type", fallback="") + for section in parser.sections() + if section.startswith("fields.") + } + if actual_fields != EXPECTED_MODEL_FIELDS: + raise BlogEditorError( + "models/entry.ini no longer matches the fields supported by this " + "blog-specific editor" + ) + if parser.get("fields.tags", "source", fallback="") != "site.query('/tags')": + raise BlogEditorError("the blog tag field is not sourced from content/tags") + choices = [ + choice.strip() + for choice in parser.get("fields.kicker", "choices", fallback="").split(",") + ] + if "Blog" not in choices: + raise BlogEditorError("the entry model no longer permits the Blog kicker") + + def _read_document(self, path: Path) -> tuple[LrDocument, bytes]: + try: + raw = path.read_bytes() + text = raw.decode("utf-8") + except (OSError, UnicodeError) as exc: + raise BlogEditorError(f"cannot read {path}: {exc}") from exc + return LrDocument.parse(text, str(path)), raw + + def _load_tags(self) -> list[Tag]: + tags: list[Tag] = [] + for directory in sorted(self.tags_root.iterdir(), key=lambda item: item.name): + if not directory.is_dir(): + continue + slug = directory.name + if not SLUG_RE.fullmatch(slug): + raise BlogEditorError(f"invalid controlled tag directory name: {slug}") + record_path = directory / "contents.lr" + if not record_path.is_file(): + raise BlogEditorError(f"controlled tag is missing contents.lr: {directory}") + self._ensure_within(record_path, self.tags_root) + document, _raw = self._read_document(record_path) + if document.get("_model") != "tag" or not document.get("title").strip(): + raise BlogEditorError(f"malformed controlled tag record: {record_path}") + tags.append(Tag(slug, document.get("title").strip())) + if not tags: + raise BlogEditorError("content/tags contains no controlled tag records") + return tags + + @staticmethod + def _ensure_within(path: Path, parent: Path) -> Path: + resolved = path.resolve() + if not resolved.is_relative_to(parent.resolve()): + raise BlogEditorError(f"unsafe path outside {parent}: {path}") + return resolved + + def list_entries(self) -> list[BlogEntry]: + entries: list[BlogEntry] = [] + for directory in self.blog_root.iterdir(): + if not directory.is_dir(): + continue + record_path = directory / "contents.lr" + if not record_path.is_file(): + continue + entries.append(self.load_entry(directory.name)) + entries.sort(key=lambda entry: (entry.publication_date, entry.title), reverse=True) + return entries + + def load_entry(self, slug: str) -> BlogEntry: + self._validate_slug(slug) + path = self._ensure_within(self.blog_root / slug / "contents.lr", self.blog_root) + if not path.is_file(): + raise BlogEditorError(f"blog entry does not exist: {slug}") + document, raw = self._read_document(path) + self._validate_loaded_entry(document, slug) + return BlogEntry(slug, path, document, raw) + + def _validate_loaded_entry(self, document: LrDocument, slug: str) -> None: + if document.get("_model") != "entry": + raise BlogEditorError(f"content/blog/{slug} is not an entry record") + if document.get("kicker") != "Blog": + raise BlogEditorError(f"content/blog/{slug} does not use the Blog kicker") + self.validate_values(self.values_for(document)) + + @staticmethod + def _validate_slug(slug: str) -> None: + if not SLUG_RE.fullmatch(slug): + raise BlogEditorError( + "slug must contain lowercase letters, numbers, and single hyphens only" + ) + + @staticmethod + def _validate_iso_date(value: str, label: str, required: bool) -> str: + value = value.strip() + if not value and not required: + return "" + if not value: + raise BlogEditorError(f"{label} is required") + try: + parsed = current_date.fromisoformat(value) + except ValueError as exc: + raise BlogEditorError(f"{label} must use YYYY-MM-DD") from exc + if parsed.isoformat() != value: + raise BlogEditorError(f"{label} must use YYYY-MM-DD") + return value + + @staticmethod + def _validate_url(value: str, label: str) -> str: + value = value.strip() + if not value: + return "" + parsed = urlsplit(value) + if parsed.scheme not in {"http", "https"} or not parsed.netloc: + raise BlogEditorError(f"{label} must be a complete HTTP or HTTPS URL") + return value + + def validate_values(self, values: dict[str, str]) -> dict[str, str]: + cleaned = {key: value for key, value in values.items()} + for required in ("title", "author", "summary", "body"): + cleaned[required] = cleaned.get(required, "") + if not cleaned[required].strip(): + raise BlogEditorError(f"{required.replace('_', ' ').title()} is required") + cleaned["title"] = cleaned["title"].strip() + cleaned["author"] = cleaned["author"].strip() + cleaned["date"] = self._validate_iso_date( + cleaned.get("date", ""), "Publication date", True + ) + cleaned["updated"] = self._validate_iso_date( + cleaned.get("updated", ""), "Updated date", False + ) + cleaned["kicker"] = cleaned.get("kicker", "").strip() + if cleaned["kicker"] != "Blog": + raise BlogEditorError("Kicker must be Blog") + + approved_tags = {tag.slug for tag in self.tags} + selected_tags = [ + tag.strip() + for tag in re.split(r"[,\n]", cleaned.get("tags", "")) + if tag.strip() + ] + unknown_tags = sorted(set(selected_tags) - approved_tags) + if unknown_tags: + raise BlogEditorError( + "unapproved tag slug(s): " + ", ".join(unknown_tags) + ) + cleaned["tags"] = ", ".join(dict.fromkeys(selected_tags)) + cleaned["external_url"] = self._validate_url( + cleaned.get("external_url", ""), "External URL" + ) + published = [ + self._validate_url(line, "Each published URL") + for line in cleaned.get("published_urls", "").splitlines() + if line.strip() + ] + cleaned["published_urls"] = "\n".join(published) + cleaned["title"] = cleaned["title"].replace("\r", "").replace("\n", " ") + cleaned["author"] = cleaned["author"].replace("\r", "").replace("\n", " ") + cleaned["summary"] = cleaned["summary"].replace("\r\n", "\n") + cleaned["body"] = cleaned["body"].replace("\r\n", "\n") + return cleaned + + @staticmethod + def values_for(document: LrDocument) -> dict[str, str]: + tags = ", ".join( + part.strip() + for part in re.split(r"[,\n]", document.get("tags")) + if part.strip() + ) + published_urls = "\n".join( + line.strip() + for line in document.get("published_urls").splitlines() + if line.strip() + ) + return { + "title": document.get("title"), + "date": document.get("date"), + "updated": document.get("updated"), + "author": document.get("author"), + "tags": tags, + "kicker": document.get("kicker"), + "summary": document.get("summary"), + "body": document.get("body"), + "external_url": document.get("external_url"), + "published_urls": published_urls, + } + + def create_entry(self, slug: str, values: dict[str, str]) -> BlogEntry: + self._validate_slug(slug) + values = self.validate_values(values) + directory = self.blog_root / slug + destination = directory / "contents.lr" + self._ensure_within(destination, self.blog_root) + if directory.exists(): + raise BlogEditorError(f"content/blog/{slug} already exists") + + document = LrDocument.parse( + "_model: entry\n---\ntitle: placeholder\n", str(destination) + ) + self._apply_values(document, values, creating=True) + payload = document.render().encode("utf-8") + try: + directory.mkdir() + with destination.open("xb") as output: + output.write(payload) + output.flush() + os.fsync(output.fileno()) + except (OSError, FileExistsError) as exc: + try: + if directory.is_dir() and not any(directory.iterdir()): + directory.rmdir() + except OSError: + pass + raise BlogEditorError(f"cannot create {destination}: {exc}") from exc + return self.load_entry(slug) + + def save_entry(self, entry: BlogEntry, values: dict[str, str]) -> BlogEntry: + values = self.validate_values(values) + destination = self._ensure_within(entry.path, self.blog_root) + temporary: Path | None = None + try: + current = destination.read_bytes() + except OSError as exc: + raise BlogEditorError(f"cannot re-read {destination}: {exc}") from exc + if current != entry.original_bytes: + raise BlogEditorError( + "the entry changed on disk after it was loaded; reload it before saving" + ) + + self._apply_values(entry.document, values, creating=False) + payload = entry.document.render().encode("utf-8") + if payload == current: + return entry + try: + with tempfile.NamedTemporaryFile( + mode="wb", prefix=".contents.lr.", dir=destination.parent, delete=False + ) as output: + temporary = Path(output.name) + output.write(payload) + output.flush() + os.fsync(output.fileno()) + os.chmod(temporary, destination.stat().st_mode) + os.replace(temporary, destination) + except OSError as exc: + try: + if temporary is not None: + temporary.unlink(missing_ok=True) + except OSError: + pass + raise BlogEditorError(f"cannot save {destination}: {exc}") from exc + return self.load_entry(entry.slug) + + def delete_entry(self, entry: BlogEntry) -> None: + self._validate_slug(entry.slug) + directory = self._ensure_within(entry.path.parent, self.blog_root) + destination = self._ensure_within(entry.path, self.blog_root) + if directory.parent != self.blog_root or directory.name != entry.slug: + raise BlogEditorError(f"unsafe blog entry directory: {directory}") + if directory.is_symlink() or getattr(directory, "is_junction", lambda: False)(): + raise BlogEditorError(f"refusing to delete linked directory: {directory}") + try: + current = destination.read_bytes() + except OSError as exc: + raise BlogEditorError(f"cannot re-read {destination}: {exc}") from exc + if current != entry.original_bytes: + raise BlogEditorError( + "the entry changed on disk after it was loaded; reload it before deleting" + ) + for child in directory.rglob("*"): + if child.is_symlink() or getattr(child, "is_junction", lambda: False)(): + raise BlogEditorError( + f"refusing to delete an entry containing a linked path: {child}" + ) + try: + shutil.rmtree(directory) + except OSError as exc: + raise BlogEditorError(f"cannot delete {directory}: {exc}") from exc + + def narration_file(self, entry: BlogEntry) -> Path: + return self._ensure_within(narration_path(entry.path.parent), self.blog_root) + + def import_narration(self, entry: BlogEntry, source: Path) -> Path: + directory = self._ensure_within(entry.path.parent, self.blog_root) + if not entry.path.is_file(): + raise BlogEditorError(f"blog entry does not exist: {entry.slug}") + try: + return import_wav( + directory, source, fallback_ffmpeg=self.site_root / "support" / "ffmpeg.exe" + ) + except NarrationImportError as exc: + raise BlogEditorError(str(exc)) from exc + + def remove_narration(self, entry: BlogEntry) -> bool: + directory = self._ensure_within(entry.path.parent, self.blog_root) + try: + return remove_narration(directory) + except NarrationImportError as exc: + raise BlogEditorError(str(exc)) from exc + + @staticmethod + def _apply_values( + document: LrDocument, values: dict[str, str], creating: bool + ) -> None: + existing = BlogRepository.values_for(document) if not creating else {} + styles = { + "summary": "multiline" if "\n" in values["summary"] else "scalar", + "body": "multiline", + "published_urls": "published_urls", + } + optional = {"updated", "tags", "external_url"} + for key in FIELD_ORDER[1:]: + value = values.get(key, "") + if not creating and existing.get(key, "") == value: + continue + if key in optional and not value: + document.remove_field(key) + continue + if key == "published_urls" or value or creating: + document.set_field(key, value, styles.get(key, "scalar")) + + +def suggest_slug(title: str) -> str: + normalized = unicodedata.normalize("NFKD", title).encode("ascii", "ignore").decode() + return re.sub(r"[^a-z0-9]+", "-", normalized.lower()).strip("-") + + +def run_gui(repository: BlogRepository) -> None: + try: + import tkinter as tk + from tkinter import filedialog, messagebox, ttk + except ImportError as exc: + raise BlogEditorError( + "Tkinter is not available in this Python installation" + ) from exc + + class BlogEditorApp: + def __init__(self) -> None: + self.root = tk.Tk() + self.root.title("Labyricorn Blog Editor") + self.root.geometry("1240x860") + self.root.minsize(980, 680) + self.current_entry: BlogEntry | None = None + self.mode = "new" + self.snapshot: dict[str, str] | None = None + + pane = ttk.Panedwindow(self.root, orient=tk.HORIZONTAL) + pane.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) + browser = ttk.Frame(pane, padding=5) + form = ttk.Frame(pane, padding=5) + pane.add(browser, weight=1) + pane.add(form, weight=3) + + columns = ("date", "title", "slug") + self.tree = ttk.Treeview(browser, columns=columns, show="headings") + self.tree.heading("date", text="Date") + self.tree.heading("title", text="Title") + self.tree.heading("slug", text="Slug") + self.tree.column("date", width=90, stretch=False) + self.tree.column("title", width=210) + self.tree.column("slug", width=180) + tree_scroll = ttk.Scrollbar(browser, orient=tk.VERTICAL, command=self.tree.yview) + self.tree.configure(yscrollcommand=tree_scroll.set) + self.tree.grid(row=0, column=0, columnspan=3, sticky="nsew") + tree_scroll.grid(row=0, column=3, sticky="ns") + browser.rowconfigure(0, weight=1) + browser.columnconfigure(0, weight=1) + ttk.Button(browser, text="New", command=self.new_entry).grid( + row=1, column=0, sticky="ew", pady=(8, 0) + ) + ttk.Button(browser, text="Edit selected", command=self.edit_selected).grid( + row=1, column=1, sticky="ew", padx=5, pady=(8, 0) + ) + ttk.Button(browser, text="Refresh", command=self.refresh).grid( + row=1, column=2, sticky="ew", pady=(8, 0) + ) + self.tree.bind("", lambda _event: self.edit_selected()) + + self.title_var = tk.StringVar() + self.slug_var = tk.StringVar() + self.date_var = tk.StringVar() + self.updated_var = tk.StringVar() + self.author_var = tk.StringVar() + self.kicker_var = tk.StringVar(value="Blog") + self.external_url_var = tk.StringVar() + self.status_var = tk.StringVar() + + form.columnconfigure(1, weight=1) + form.columnconfigure(3, weight=1) + form.rowconfigure(9, weight=1) + ttk.Label(form, text="Title").grid(row=0, column=0, sticky="w") + ttk.Entry(form, textvariable=self.title_var).grid( + row=0, column=1, columnspan=3, sticky="ew", pady=3 + ) + ttk.Label(form, text="Slug").grid(row=1, column=0, sticky="w") + self.slug_entry = ttk.Entry(form, textvariable=self.slug_var) + self.slug_entry.grid(row=1, column=1, columnspan=2, sticky="ew", pady=3) + ttk.Button(form, text="Suggest", command=self.fill_suggested_slug).grid( + row=1, column=3, sticky="e", padx=(5, 0) + ) + ttk.Label(form, text="Publication date").grid(row=2, column=0, sticky="w") + ttk.Entry(form, textvariable=self.date_var, width=16).grid( + row=2, column=1, sticky="ew", pady=3 + ) + ttk.Label(form, text="Updated date").grid( + row=2, column=2, sticky="w", padx=(12, 0) + ) + ttk.Entry(form, textvariable=self.updated_var, width=16).grid( + row=2, column=3, sticky="ew", pady=3 + ) + ttk.Label(form, text="Author").grid(row=3, column=0, sticky="w") + ttk.Entry(form, textvariable=self.author_var).grid( + row=3, column=1, sticky="ew", pady=3 + ) + ttk.Label(form, text="Type").grid(row=3, column=2, sticky="w", padx=(12, 0)) + ttk.Combobox( + form, textvariable=self.kicker_var, values=("Blog",), state="readonly" + ).grid(row=3, column=3, sticky="ew", pady=3) + ttk.Label(form, text="External URL").grid(row=4, column=0, sticky="w") + ttk.Entry(form, textvariable=self.external_url_var).grid( + row=4, column=1, columnspan=3, sticky="ew", pady=3 + ) + + ttk.Label(form, text="Narration").grid(row=5, column=0, sticky="w") + narration_frame = ttk.Frame(form) + narration_frame.grid(row=5, column=1, columnspan=3, sticky="ew", pady=3) + narration_frame.columnconfigure(0, weight=1) + self.narration_var = tk.StringVar(value="Narration: None") + ttk.Label(narration_frame, textvariable=self.narration_var).grid(row=0, column=0, sticky="w") + self.choose_narration_button = ttk.Button( + narration_frame, text="Choose Narration WAV…", command=self.choose_narration, state="disabled" + ) + self.choose_narration_button.grid(row=0, column=1, padx=(8, 0)) + self.remove_narration_button = ttk.Button( + narration_frame, text="Remove", command=self.remove_current_narration, state="disabled" + ) + self.remove_narration_button.grid(row=0, column=2, padx=(8, 0)) + + ttk.Label(form, text="Summary").grid(row=6, column=0, sticky="nw", pady=(5, 0)) + self.summary_text = tk.Text(form, height=3, wrap="word", undo=True) + self.summary_text.grid(row=6, column=1, columnspan=3, sticky="nsew", pady=3) + ttk.Label(form, text="Published URLs\n(one per line)").grid( + row=7, column=0, sticky="nw", pady=(5, 0) + ) + self.published_text = tk.Text(form, height=3, wrap="none", undo=True) + self.published_text.grid(row=7, column=1, columnspan=3, sticky="nsew", pady=3) + ttk.Label(form, text="Controlled tags").grid( + row=8, column=0, sticky="nw", pady=(5, 0) + ) + tag_frame = ttk.Frame(form) + tag_frame.grid(row=8, column=1, columnspan=3, sticky="nsew", pady=3) + tag_frame.columnconfigure(0, weight=1) + self.tag_list = tk.Listbox( + tag_frame, height=6, selectmode=tk.EXTENDED, exportselection=False + ) + tag_scroll = ttk.Scrollbar(tag_frame, orient=tk.VERTICAL, command=self.tag_list.yview) + self.tag_list.configure(yscrollcommand=tag_scroll.set) + self.tag_list.grid(row=0, column=0, sticky="nsew") + tag_scroll.grid(row=0, column=1, sticky="ns") + for tag in repository.tags: + self.tag_list.insert(tk.END, f"{tag.title} ({tag.slug})") + + ttk.Label(form, text="Body (Markdown)").grid( + row=9, column=0, sticky="nw", pady=(5, 0) + ) + body_frame = ttk.Frame(form) + body_frame.grid(row=9, column=1, columnspan=3, sticky="nsew", pady=3) + body_frame.rowconfigure(0, weight=1) + body_frame.columnconfigure(0, weight=1) + self.body_text = tk.Text(body_frame, wrap="word", undo=True) + body_scroll = ttk.Scrollbar(body_frame, orient=tk.VERTICAL, command=self.body_text.yview) + self.body_text.configure(yscrollcommand=body_scroll.set) + self.body_text.grid(row=0, column=0, sticky="nsew") + body_scroll.grid(row=0, column=1, sticky="ns") + + footer = ttk.Frame(form) + footer.grid(row=10, column=0, columnspan=4, sticky="ew", pady=(8, 0)) + footer.columnconfigure(0, weight=1) + ttk.Label(footer, textvariable=self.status_var).grid(row=0, column=0, sticky="w") + self.delete_button = ttk.Button( + footer, text="Delete entry", command=self.delete_current, state="disabled" + ) + self.delete_button.grid(row=0, column=1, sticky="e", padx=(0, 8)) + ttk.Button(footer, text="Save entry", command=self.save).grid( + row=0, column=2, sticky="e" + ) + + self.root.bind("", lambda _event: self.save()) + self.root.protocol("WM_DELETE_WINDOW", self.close) + self.refresh(preserve_selection=False) + self.new_entry(confirm=False) + + def collect_values(self) -> dict[str, str]: + selected = [repository.tags[index].slug for index in self.tag_list.curselection()] + return { + "title": self.title_var.get(), + "date": self.date_var.get(), + "updated": self.updated_var.get(), + "author": self.author_var.get(), + "tags": ", ".join(selected), + "kicker": self.kicker_var.get(), + "summary": self.summary_text.get("1.0", "end-1c"), + "body": self.body_text.get("1.0", "end-1c"), + "external_url": self.external_url_var.get(), + "published_urls": self.published_text.get("1.0", "end-1c"), + } + + def set_values(self, values: dict[str, str]) -> None: + self.title_var.set(values.get("title", "")) + self.date_var.set(values.get("date", "")) + self.updated_var.set(values.get("updated", "")) + self.author_var.set(values.get("author", "")) + self.kicker_var.set("Blog") + self.external_url_var.set(values.get("external_url", "")) + for widget, key in ( + (self.summary_text, "summary"), + (self.published_text, "published_urls"), + (self.body_text, "body"), + ): + widget.delete("1.0", tk.END) + widget.insert("1.0", values.get(key, "")) + selected = { + part.strip() for part in values.get("tags", "").split(",") if part.strip() + } + self.tag_list.selection_clear(0, tk.END) + for index, tag in enumerate(repository.tags): + if tag.slug in selected: + self.tag_list.selection_set(index) + + def has_unsaved_changes(self) -> bool: + return self.snapshot is not None and self.collect_values() != self.snapshot + + def may_discard(self) -> bool: + return not self.has_unsaved_changes() or messagebox.askyesno( + "Discard changes?", "Discard the unsaved changes in the current form?" + ) + + def refresh(self, preserve_selection: bool = True) -> None: + selected = self.tree.selection()[0] if preserve_selection and self.tree.selection() else None + self.tree.delete(*self.tree.get_children()) + try: + entries = repository.list_entries() + except BlogEditorError as exc: + messagebox.showerror("Cannot load blog entries", str(exc)) + return + for entry in entries: + self.tree.insert( + "", tk.END, iid=entry.slug, values=(entry.publication_date, entry.title, entry.slug) + ) + if selected and self.tree.exists(selected): + self.tree.selection_set(selected) + self.status_var.set(f"{len(entries)} blog entries") + + def new_entry(self, confirm: bool = True) -> None: + if confirm and not self.may_discard(): + return + self.mode = "new" + self.current_entry = None + self.delete_button.configure(state="disabled") + self.slug_entry.configure(state="normal") + self.slug_var.set("") + self.set_values( + { + "date": current_date.today().isoformat(), + "author": "Christopher Chambers", + "kicker": "Blog", + } + ) + self.snapshot = self.collect_values() + self.status_var.set("Creating a new blog entry") + self.narration_var.set("Narration: save this entry before adding narration") + self.choose_narration_button.configure(state="disabled") + self.remove_narration_button.configure(state="disabled") + + def edit_selected(self) -> None: + selection = self.tree.selection() + if not selection: + messagebox.showinfo("Select an entry", "Select a blog entry to edit.") + return + if not self.may_discard(): + return + try: + entry = repository.load_entry(selection[0]) + except BlogEditorError as exc: + messagebox.showerror("Cannot load entry", str(exc)) + return + self.mode = "edit" + self.current_entry = entry + self.delete_button.configure(state="normal") + self.slug_var.set(entry.slug) + self.slug_entry.configure(state="readonly") + self.set_values(repository.values_for(entry.document)) + self.update_narration_status() + self.snapshot = self.collect_values() + self.status_var.set(f"Editing content/blog/{entry.slug}/contents.lr") + + def fill_suggested_slug(self) -> None: + if self.mode != "new": + return + self.slug_var.set(suggest_slug(self.title_var.get())) + + def update_narration_status(self) -> None: + if self.current_entry is None: + self.narration_var.set("Narration: None") + self.choose_narration_button.configure(state="disabled") + self.remove_narration_button.configure(state="disabled") + return + narration = repository.narration_file(self.current_entry) + exists = narration.is_file() + self.narration_var.set("Narration: narration.mp3" if exists else "Narration: None") + self.choose_narration_button.configure(state="normal") + self.remove_narration_button.configure(state="normal" if exists else "disabled") + + def choose_narration(self) -> None: + if self.current_entry is None: + return + selected = filedialog.askopenfilename( + title="Choose narration WAV file", + filetypes=[("WAV audio", "*.wav"), ("All files", "*.*")], + ) + if not selected: + return + destination = repository.narration_file(self.current_entry) + if destination.is_file() and not messagebox.askyesno( + "Replace narration?", + "Replace the existing narration.mp3 for this blog entry?", + icon="warning", + ): + return + try: + repository.import_narration(self.current_entry, Path(selected)) + except BlogEditorError as exc: + messagebox.showerror("Cannot import narration", str(exc)) + return + self.update_narration_status() + self.status_var.set(f"Imported narration.mp3 for {self.current_entry.slug}") + + def remove_current_narration(self) -> None: + if self.current_entry is None: + return + if not messagebox.askyesno( + "Remove narration?", + "Remove narration.mp3 from this blog entry?", + icon="warning", + ): + return + try: + repository.remove_narration(self.current_entry) + except BlogEditorError as exc: + messagebox.showerror("Cannot remove narration", str(exc)) + return + self.update_narration_status() + self.status_var.set(f"Removed narration.mp3 from {self.current_entry.slug}") + + def save(self) -> None: + try: + values = self.collect_values() + if self.mode == "new": + entry = repository.create_entry(self.slug_var.get().strip(), values) + else: + if self.current_entry is None: + raise BlogEditorError("no blog entry is loaded") + entry = repository.save_entry(self.current_entry, values) + except BlogEditorError as exc: + messagebox.showerror("Cannot save entry", str(exc)) + return + self.mode = "edit" + self.current_entry = entry + self.delete_button.configure(state="normal") + self.slug_var.set(entry.slug) + self.slug_entry.configure(state="readonly") + self.set_values(repository.values_for(entry.document)) + self.update_narration_status() + self.snapshot = self.collect_values() + self.refresh(preserve_selection=False) + self.tree.selection_set(entry.slug) + self.tree.see(entry.slug) + self.status_var.set(f"Saved content/blog/{entry.slug}/contents.lr") + + def delete_current(self) -> None: + if self.mode != "edit" or self.current_entry is None: + return + entry = self.current_entry + try: + additional_files = sum( + 1 + for path in entry.path.parent.rglob("*") + if path.is_file() and path != entry.path + ) + except OSError as exc: + messagebox.showerror("Cannot inspect entry", str(exc)) + return + attachment_note = ( + f" It also contains {additional_files} additional file(s)." + if additional_files + else "" + ) + unsaved_note = ( + " Unsaved form changes will be discarded." if self.has_unsaved_changes() else "" + ) + confirmed = messagebox.askyesno( + "Delete blog entry?", + f"Delete {entry.title!r} ({entry.slug}) from the working tree?" + f"{attachment_note}{unsaved_note}\n\n" + "This removes the complete entry directory. The deletion can be reviewed " + "and recovered with Git until it is committed.", + icon="warning", + ) + if not confirmed: + return + try: + repository.delete_entry(entry) + except BlogEditorError as exc: + messagebox.showerror("Cannot delete entry", str(exc)) + return + deleted_slug = entry.slug + self.snapshot = None + self.refresh(preserve_selection=False) + self.new_entry(confirm=False) + self.status_var.set(f"Deleted content/blog/{deleted_slug} from the working tree") + + def close(self) -> None: + if self.may_discard(): + self.root.destroy() + + try: + app = BlogEditorApp() + except tk.TclError as exc: + raise BlogEditorError(f"cannot open the Tkinter window: {exc}") from exc + app.root.mainloop() + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--site-root", type=Path, default=Path(__file__).resolve().parents[1] + ) + args = parser.parse_args() + try: + repository = BlogRepository(args.site_root) + run_gui(repository) + except BlogEditorError as exc: + parser.exit(1, f"blog-editor: ERROR: {exc}\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/narration_import.py b/scripts/narration_import.py new file mode 100644 index 0000000..81e1c58 --- /dev/null +++ b/scripts/narration_import.py @@ -0,0 +1,91 @@ +"""Narrow WAV-to-MP3 narration attachment support for Labyricorn editors.""" + +from __future__ import annotations + +import os +from pathlib import Path +import shutil +import subprocess +import tempfile + + +NARRATION_FILENAME = "narration.mp3" + + +class NarrationImportError(Exception): + """Raised when a narration attachment cannot be safely changed.""" + + +def narration_path(entry_directory: Path) -> Path: + """Return the one supported narration attachment path for an entry.""" + return entry_directory / NARRATION_FILENAME + + +def import_wav( + entry_directory: Path, + source: Path, + *, + ffmpeg: str | Path | None = None, + fallback_ffmpeg: Path | None = None, +) -> Path: + """Convert *source* WAV to an atomically replaced narration attachment.""" + source = source.expanduser() + if source.suffix.lower() != ".wav": + raise NarrationImportError("choose a WAV (.wav) file for narration") + if not source.is_file(): + raise NarrationImportError(f"narration source is not a regular file: {source}") + if not entry_directory.is_dir(): + raise NarrationImportError(f"entry directory does not exist: {entry_directory}") + + executable = str(ffmpeg) if ffmpeg else shutil.which("ffmpeg") + if not executable and fallback_ffmpeg is not None and fallback_ffmpeg.is_file(): + executable = str(fallback_ffmpeg) + if not executable: + raise NarrationImportError( + "ffmpeg is required to convert WAV narration to narration.mp3; add it to PATH " + "or provide support/ffmpeg.exe" + ) + + destination = narration_path(entry_directory) + descriptor, temporary_name = tempfile.mkstemp( + prefix=".narration-", suffix=".mp3", dir=entry_directory + ) + os.close(descriptor) + temporary = Path(temporary_name) + try: + command = [ + executable, "-y", "-i", str(source), "-vn", "-ar", "44100", "-ac", "1", + "-c:a", "libmp3lame", "-b:a", "96k", str(temporary), + ] + run_options: dict[str, object] = {"capture_output": True, "text": True} + if os.name == "nt": + run_options["creationflags"] = subprocess.CREATE_NO_WINDOW + completed = subprocess.run(command, **run_options) + if completed.returncode: + detail = (completed.stderr or completed.stdout or "ffmpeg returned an error").strip() + raise NarrationImportError(f"ffmpeg could not convert the narration WAV: {detail}") + if not temporary.is_file() or temporary.stat().st_size == 0: + raise NarrationImportError("ffmpeg completed without producing a usable MP3 file") + os.replace(temporary, destination) + except OSError as exc: + raise NarrationImportError(f"cannot convert narration WAV: {exc}") from exc + finally: + try: + temporary.unlink(missing_ok=True) + except OSError: + pass + return destination + + +def remove_narration(entry_directory: Path) -> bool: + """Remove only the canonical narration attachment, if it exists.""" + destination = narration_path(entry_directory) + if not destination.exists(): + return False + if not destination.is_file(): + raise NarrationImportError(f"narration attachment is not a regular file: {destination}") + try: + destination.unlink() + except OSError as exc: + raise NarrationImportError(f"cannot remove narration attachment: {exc}") from exc + return True diff --git a/support/ffmpeg.exe b/support/ffmpeg.exe new file mode 100644 index 0000000000000000000000000000000000000000..2099dce39f5d034241f8d9ce55aaf22d2c1a6a47 GIT binary patch literal 551424 zcmdSCd0?{n`Y1NuDQ{=WZx)5^W~ET8i^ zpZ%=Ua7ufucPthw<-aXkVzJpg^;c*A{ons-C40aga|gs8@B7l8vrE!1?RosT^Dc{z zzx0y-y7a7z;$zOb_~J{N<7b~6zqIAz_<0w{lSdyHzvz;4&fUL%|LrRy(2e!6*g2DT zi1pd{+w%*pt&Q#9YlmLF_K$s07K=6aqLEmveIU6NwnSZt9(pHBcpoPQC;3cAccoAZAxQ#>|lK~mB+3=ljpMXm@AO0w~ICYOc~MNYT$2Q`1t-a z{`z*Ys_!Sq%A3n$RXhDaMwGOF^SKk6d9PbbpM{Y6Ug%s@CJuJ{pL168S$wyPX%&6K zGV3W@^j8;)b?kp>Sg`2{k$`ef^4$Era&`NU56js;($|<6^9awPzdF#`e?nMp?OtS5 zKm(O~?FY)8ec5HII=Dao)KTsS{#u3Kxgk7Db7*hbxA6zyofnp~Jb^c{CID{!fpX0k z+IB53J0f_eY~6mHrORcPjsb+_Ej+d~KJ9zu>h{0%+zT&JLGil4bG2XeR~L&NQS|x$ zEnDJ;4Ie%--qP1UrZn@9lFTP1-m-=5)k}ll zy;T+)TPW{lK6R6Rsx;+2pUAw|tJz7+LC|7JZ;6{(#VJzptA=zH(@i_kGh| zva%-a9begKRstyLla|@IrTL{?N7^T~`I&^jy(xRUEY>d65+@~2Oq`H7{)CfGJdUUidk>`r*B@W*`n#te*pAo3UOJ~dwq|E%kC|Lnj^=*# z)g5zX52}}LS!UjNvn-bO%U+>^-+vYVraiD2)Ww^*Zgm-n5Ad2>>SWhZ#~<{2eXVHz z88jJv>KSLAo;WRWdg6@4nG4$!Ppie?Ea>g*k&MNl&Y|Y-s{p~vnpfJZJKQO~gUiT< z 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πU=aMeVu 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 z z@tZ8%!~JOQ$Kkul%ir}4-p4)i)bsN_H{_kW!3VpJUOv*#b2Gv>hv7#hJon`<_ijM= zhA_Oe29F=O=hYKyh7b<78M_vPS}QO6?%wm)4j?@874djn+M|Gr?7q_O8p^*E_}wb~ zcMs#u?H+Nv3vPGW?cUAr8>_hqh+Em56rGdw%;A3GEjTw1$3ozscj@J!!v<-35%Fwd zOxN>piCnqS;e;z5REv{`!tNR~t7#~fJo>DzI}Q5*FX3&IXy~QdL$V{4P6~fAz%O{U z^2re*i)*i!zu#^UxvZgRc>OA$j&9I<&}Z^$o!%GXcb}d=pWMCX^!U=}o4iA=Pv96+ zJ14h}xUL0Kw@^e6NUsSfuQ-&4-LOCF$zi%t=_WEUMncEac(Khc5*FP--@;x}yaGx| zO!U2E^xJQD&PTBQz1!aBj}?W!=LN<;WbuF5?zD%|COCh6c)pJEzwZUc|2>QUM|Ka8 zG|TVnJ<4hRr!Ty~_>Wrrzp*>*L1$9_CtqOv`Ac>Bp?0p=f)S2*y~rSX?A@KE_UY5} z?K61Y3u~XZB}%eT`&fLM`7G2vPB;ES?IVGvy`FyiINkUQwU4})v-2kuhAz}TPB;Gl z>+QoWYvgq1f|vEb9LHb;7F+6IBb@pAzg_K3l|9-GcDY^hZ0G#V&8BCmwuc`3^oWgD zl8}ctYd?7NCcPiOLGOp`KEFJ6&ZpNV%Q(IWM}dXsIpEA`8uvVzOm)wwJtaDur7rGRtPJ-XeIB&C*AE}@_Kg_qe2khsf9}Mm@Vf`U|HQ9~-%9*s zM8+Ng<}T?J+9LayugLlOg*OBvIAx(Y><=w%w4qX4Q_Z>wI4UQQzuD|l-VfnBmo31b zJL~!X*iHH#*nJ`X_vv~5cg+i=pTKLO*E&W8kUzKNhvoD8t^7yq?&a_N{oP#o|J)0V zzfd_(H@qcqEsZWPtG07%(*-Vhvcch&?KoFY&0(B}sMg9{jTtbw(e17oBZ^106UXY) z8hbc?DDsaGe~gQW+o`qvfaZYg>n`5MdvqO@Dk_O zFDzKzE0kXX1DG~DYVe)<@x4ncKlbc4K27O;dXL^0vWNNfJbzAGehcDriVuD~WalB< ztF6R<5hQsHSbjV0ex~|I;RVM3KkWT?Al1?P0FJ-x*&rj$i-fq>mh3&s%4jKE?#1PD zb+4_YO^dXL)zB^}sZ^3mLq#GHX{fZNq$1zvyk4(sG(MmA`}g^M|NGuL&g<;)objCJ zdCqfwug`z$R^w5r0OkK^+?eYySaFt^3ORg&+30~o3>Gaa3}2N6nx>|v@Qn!fDucck z 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 literal 0 HcmV?d00001 diff --git a/tests/test_article_editor.py b/tests/test_article_editor.py new file mode 100644 index 0000000..56d114c --- /dev/null +++ b/tests/test_article_editor.py @@ -0,0 +1,187 @@ +from __future__ import annotations + +from pathlib import Path +import shutil +import sys +import unittest +import uuid + + +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) + +from article_editor import ArticleEditorError, ArticleRepository, suggest_slug # noqa: E402 + + +class ArticleEditorTests(unittest.TestCase): + def setUp(self) -> None: + cache_root = Path(__file__).resolve().parents[1] / ".cache" + cache_root.mkdir(exist_ok=True) + self.site_root = cache_root / f"article-editor-test-{uuid.uuid4().hex}" + (self.site_root / "content" / "articles").mkdir(parents=True) + (self.site_root / "content" / "tags" / "writing").mkdir(parents=True) + (self.site_root / "models").mkdir() + (self.site_root / "Test.lektorproject").write_text( + "[project]\nname = Test\n", encoding="utf-8" + ) + (self.site_root / "content" / "articles" / "contents.lr").write_text( + "_model: section\n---\ntitle: Articles\n", encoding="utf-8" + ) + (self.site_root / "content" / "tags" / "writing" / "contents.lr").write_text( + "_model: tag\n---\ntitle: Writing\n---\nsummary: Writing.\n", + encoding="utf-8", + ) + source_model = Path(__file__).resolve().parents[1] / "models" / "entry.ini" + shutil.copy2(source_model, self.site_root / "models" / "entry.ini") + self.repository = ArticleRepository(self.site_root) + + def tearDown(self) -> None: + shutil.rmtree(self.site_root) + + @staticmethod + def values(**overrides: str) -> dict[str, str]: + values = { + "title": "Test Entry", + "date": "2026-08-13", + "updated": "", + "author": "Test Author", + "tags": "writing", + "kicker": "Article", + "summary": "A test summary.", + "body": "A **Markdown** body.", + "external_url": "", + "published_urls": "https://example.test/post", + } + values.update(overrides) + return values + + def test_current_site_article_records_and_controlled_tags_load(self) -> None: + repository = ArticleRepository(Path(__file__).resolve().parents[1]) + entries = repository.list_entries() + self.assertGreaterEqual(len(entries), 7) + self.assertGreaterEqual(len(repository.tags), 45) + self.assertTrue(all(entry.document.get("kicker") == "Article" for entry in entries)) + for entry in entries: + with self.subTest(slug=entry.slug): + self.assertEqual( + entry.document.render().encode("utf-8"), entry.original_bytes + ) + + def test_create_uses_existing_record_conventions_and_refuses_collision(self) -> None: + entry = self.repository.create_entry( + "test-entry", self.values(body=" preserved indentation\n\nBody text.") + ) + rendered = entry.path.read_text(encoding="utf-8") + self.assertIn("_model: entry\n---\ntitle: Test Entry\n", rendered) + self.assertIn("tags: writing\n", rendered) + self.assertIn( + "published_urls:\n\nhttps://example.test/post\n---\nbody:\n", + rendered, + ) + with self.assertRaises(ArticleEditorError): + self.repository.create_entry("test-entry", self.values()) + + def test_edit_preserves_unmanaged_and_unchanged_blocks_exactly(self) -> None: + entry = self.repository.create_entry( + "test-entry", self.values(body=" preserved indentation\n\nBody text.") + ) + original = entry.path.read_text(encoding="utf-8") + marker = "---\neditor_note:\nKeep this unknown field exactly. \n" + original = original.replace("---\nbody:\n", marker + "---\nbody:\n") + entry.path.write_text(original, encoding="utf-8") + + loaded = self.repository.load_entry("test-entry") + values = self.repository.values_for(loaded.document) + values["summary"] = "An edited summary." + saved = self.repository.save_entry(loaded, values) + rendered = saved.path.read_text(encoding="utf-8") + + self.assertIn(marker, rendered) + self.assertIn("summary: An edited summary.\n", rendered) + self.assertIn("body:\n preserved indentation\n\nBody text.\n", rendered) + self.assertIn("published_urls:\n\nhttps://example.test/post\n", rendered) + + def test_save_detects_an_external_change(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + with entry.path.open("a", encoding="utf-8") as output: + output.write("\n") + with self.assertRaisesRegex(ArticleEditorError, "changed on disk"): + self.repository.save_entry(entry, self.values(summary="Changed")) + + def test_delete_removes_only_the_loaded_entry_directory(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + attachment = entry.path.parent / "narration.mp3" + attachment.write_bytes(b"disposable attachment") + neighbor = self.repository.create_entry("neighbor-entry", self.values()) + + self.repository.delete_entry(entry) + + self.assertFalse(entry.path.parent.exists()) + self.assertTrue(neighbor.path.is_file()) + + def test_delete_detects_an_external_change(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + with entry.path.open("a", encoding="utf-8") as output: + output.write("\n") + with self.assertRaisesRegex(ArticleEditorError, "changed on disk"): + self.repository.delete_entry(entry) + self.assertTrue(entry.path.is_file()) + + def test_unapproved_tag_is_rejected(self) -> None: + with self.assertRaisesRegex(ArticleEditorError, "unapproved tag"): + self.repository.create_entry("test-entry", self.values(tags="invented")) + + def test_cover_image_is_copied_renamed_referenced_and_reopened(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + source = self.site_root / "source.png" + source.write_bytes(b"disposable png bytes") + + saved, cover = self.repository.add_or_replace_cover( + entry, source, "Test cover", replace=False + ) + + self.assertEqual(cover.name, "cover-image.png") + self.assertEqual(cover.path.read_bytes(), source.read_bytes()) + self.assertTrue(saved.document.get("body").startswith("![Test cover](cover-image.png)\n\n")) + reopened = self.repository.load_entry("test-entry") + self.assertEqual(self.repository.cover_image(reopened), cover) + + def test_cover_replacement_requires_confirmation_and_removes_old_cover(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + first = self.site_root / "first.png" + second = self.site_root / "second.jpg" + first.write_bytes(b"first") + second.write_bytes(b"second") + saved, _cover = self.repository.add_or_replace_cover( + entry, first, "First", replace=False + ) + with self.assertRaisesRegex(ArticleEditorError, "confirm replacement"): + self.repository.add_or_replace_cover(saved, second, "Second", replace=False) + + replaced, cover = self.repository.add_or_replace_cover( + saved, second, "Second", replace=True + ) + self.assertEqual(cover.name, "cover-image.jpg") + self.assertFalse((replaced.path.parent / "cover-image.png").exists()) + self.assertTrue((replaced.path.parent / "cover-image.jpg").is_file()) + self.assertTrue(replaced.document.get("body").startswith("![Second](cover-image.jpg)\n\n")) + + def test_remove_cover_removes_reference_and_article_local_file(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + source = self.site_root / "source.png" + source.write_bytes(b"cover") + saved, cover = self.repository.add_or_replace_cover( + entry, source, "Test cover", replace=False + ) + + without_cover = self.repository.remove_cover(saved, remove_file=True) + + self.assertIsNone(self.repository.cover_image(without_cover)) + self.assertFalse(cover.path.exists()) + self.assertEqual(without_cover.document.get("body"), self.values()["body"]) + + def test_slug_suggestion_matches_repository_style(self) -> None: + self.assertEqual(suggest_slug("We’re Testing: A GUI!"), "were-testing-a-gui") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_blog_editor.py b/tests/test_blog_editor.py new file mode 100644 index 0000000..20d412a --- /dev/null +++ b/tests/test_blog_editor.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from pathlib import Path +import shutil +import sys +import unittest +import uuid + + +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) + +from blog_editor import BlogEditorError, BlogRepository, suggest_slug # noqa: E402 + + +class BlogEditorTests(unittest.TestCase): + def setUp(self) -> None: + cache_root = Path(__file__).resolve().parents[1] / ".cache" + cache_root.mkdir(exist_ok=True) + self.site_root = cache_root / f"blog-editor-test-{uuid.uuid4().hex}" + (self.site_root / "content" / "blog").mkdir(parents=True) + (self.site_root / "content" / "tags" / "writing").mkdir(parents=True) + (self.site_root / "models").mkdir() + (self.site_root / "Test.lektorproject").write_text( + "[project]\nname = Test\n", encoding="utf-8" + ) + (self.site_root / "content" / "blog" / "contents.lr").write_text( + "_model: section\n---\ntitle: Blog\n", encoding="utf-8" + ) + (self.site_root / "content" / "tags" / "writing" / "contents.lr").write_text( + "_model: tag\n---\ntitle: Writing\n---\nsummary: Writing.\n", + encoding="utf-8", + ) + source_model = Path(__file__).resolve().parents[1] / "models" / "entry.ini" + shutil.copy2(source_model, self.site_root / "models" / "entry.ini") + self.repository = BlogRepository(self.site_root) + + def tearDown(self) -> None: + shutil.rmtree(self.site_root) + + @staticmethod + def values(**overrides: str) -> dict[str, str]: + values = { + "title": "Test Entry", + "date": "2026-08-13", + "updated": "", + "author": "Test Author", + "tags": "writing", + "kicker": "Blog", + "summary": "A test summary.", + "body": "A **Markdown** body.", + "external_url": "", + "published_urls": "https://example.test/post", + } + values.update(overrides) + return values + + def test_current_site_blog_records_and_controlled_tags_load(self) -> None: + repository = BlogRepository(Path(__file__).resolve().parents[1]) + entries = repository.list_entries() + self.assertGreaterEqual(len(entries), 7) + self.assertGreaterEqual(len(repository.tags), 45) + self.assertTrue(all(entry.document.get("kicker") == "Blog" for entry in entries)) + for entry in entries: + with self.subTest(slug=entry.slug): + self.assertEqual( + entry.document.render().encode("utf-8"), entry.original_bytes + ) + + def test_create_uses_existing_record_conventions_and_refuses_collision(self) -> None: + entry = self.repository.create_entry( + "test-entry", self.values(body=" preserved indentation\n\nBody text.") + ) + rendered = entry.path.read_text(encoding="utf-8") + self.assertIn("_model: entry\n---\ntitle: Test Entry\n", rendered) + self.assertIn("tags: writing\n", rendered) + self.assertIn( + "published_urls:\n\nhttps://example.test/post\n---\nbody:\n", + rendered, + ) + with self.assertRaises(BlogEditorError): + self.repository.create_entry("test-entry", self.values()) + + def test_edit_preserves_unmanaged_and_unchanged_blocks_exactly(self) -> None: + entry = self.repository.create_entry( + "test-entry", self.values(body=" preserved indentation\n\nBody text.") + ) + original = entry.path.read_text(encoding="utf-8") + marker = "---\neditor_note:\nKeep this unknown field exactly. \n" + original = original.replace("---\nbody:\n", marker + "---\nbody:\n") + entry.path.write_text(original, encoding="utf-8") + + loaded = self.repository.load_entry("test-entry") + values = self.repository.values_for(loaded.document) + values["summary"] = "An edited summary." + saved = self.repository.save_entry(loaded, values) + rendered = saved.path.read_text(encoding="utf-8") + + self.assertIn(marker, rendered) + self.assertIn("summary: An edited summary.\n", rendered) + self.assertIn("body:\n preserved indentation\n\nBody text.\n", rendered) + self.assertIn("published_urls:\n\nhttps://example.test/post\n", rendered) + + def test_save_detects_an_external_change(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + with entry.path.open("a", encoding="utf-8") as output: + output.write("\n") + with self.assertRaisesRegex(BlogEditorError, "changed on disk"): + self.repository.save_entry(entry, self.values(summary="Changed")) + + def test_delete_removes_only_the_loaded_entry_directory(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + attachment = entry.path.parent / "narration.mp3" + attachment.write_bytes(b"disposable attachment") + neighbor = self.repository.create_entry("neighbor-entry", self.values()) + + self.repository.delete_entry(entry) + + self.assertFalse(entry.path.parent.exists()) + self.assertTrue(neighbor.path.is_file()) + + def test_delete_detects_an_external_change(self) -> None: + entry = self.repository.create_entry("test-entry", self.values()) + with entry.path.open("a", encoding="utf-8") as output: + output.write("\n") + with self.assertRaisesRegex(BlogEditorError, "changed on disk"): + self.repository.delete_entry(entry) + self.assertTrue(entry.path.is_file()) + + def test_unapproved_tag_is_rejected(self) -> None: + with self.assertRaisesRegex(BlogEditorError, "unapproved tag"): + self.repository.create_entry("test-entry", self.values(tags="invented")) + + def test_slug_suggestion_matches_repository_style(self) -> None: + self.assertEqual(suggest_slug("We’re Testing: A GUI!"), "were-testing-a-gui") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_narration_import.py b/tests/test_narration_import.py new file mode 100644 index 0000000..8284c49 --- /dev/null +++ b/tests/test_narration_import.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +from pathlib import Path +import shutil +import subprocess +import sys +import unittest +import uuid +from unittest import mock + + +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) + +from narration_import import NarrationImportError, import_wav, remove_narration # noqa: E402 + + +class NarrationImportTests(unittest.TestCase): + def setUp(self) -> None: + cache_root = Path(__file__).resolve().parents[1] / ".cache" + cache_root.mkdir(exist_ok=True) + self.directory = cache_root / f"narration-import-test-{uuid.uuid4().hex}" + self.directory.mkdir() + self.source = self.directory / "source.wav" + self.source.write_bytes(b"disposable wav data") + + def tearDown(self) -> None: + shutil.rmtree(self.directory) + + def test_success_uses_fixed_preset_and_replaces_only_after_temp_output(self) -> None: + destination = self.directory / "narration.mp3" + destination.write_bytes(b"old narration") + + def successful_ffmpeg(command: list[str], **_kwargs: object) -> subprocess.CompletedProcess[str]: + Path(command[-1]).write_bytes(b"converted mp3") + return subprocess.CompletedProcess(command, 0, "", "") + + with mock.patch("narration_import.subprocess.run", side_effect=successful_ffmpeg) as run: + result = import_wav(self.directory, self.source, ffmpeg="ffmpeg") + + self.assertEqual(result, destination) + self.assertEqual(destination.read_bytes(), b"converted mp3") + command = run.call_args.args[0] + self.assertEqual( + command[1:-1], + ["-y", "-i", str(self.source), "-vn", "-ar", "44100", "-ac", "1", + "-c:a", "libmp3lame", "-b:a", "96k"], + ) + self.assertFalse(any(self.directory.glob(".narration-*.mp3"))) + + def test_failed_conversion_preserves_existing_narration(self) -> None: + destination = self.directory / "narration.mp3" + destination.write_bytes(b"old narration") + failed = subprocess.CompletedProcess(["ffmpeg"], 1, "", "bad WAV") + + with mock.patch("narration_import.subprocess.run", return_value=failed): + with self.assertRaisesRegex(NarrationImportError, "bad WAV"): + import_wav(self.directory, self.source, ffmpeg="ffmpeg") + + self.assertEqual(destination.read_bytes(), b"old narration") + self.assertFalse(any(self.directory.glob(".narration-*.mp3"))) + + def test_missing_ffmpeg_and_removal_are_safe(self) -> None: + with mock.patch("narration_import.shutil.which", return_value=None): + with self.assertRaisesRegex(NarrationImportError, "ffmpeg is required"): + import_wav(self.directory, self.source) + unrelated = self.directory / "other-attachment.txt" + unrelated.write_text("keep", encoding="utf-8") + narration = self.directory / "narration.mp3" + narration.write_bytes(b"narration") + self.assertTrue(remove_narration(self.directory)) + self.assertFalse(narration.exists()) + self.assertEqual(unrelated.read_text(encoding="utf-8"), "keep") + + def test_repository_fallback_is_used_when_ffmpeg_is_not_on_path(self) -> None: + fallback = self.directory / "ffmpeg.exe" + fallback.write_bytes(b"placeholder executable") + + def successful_ffmpeg(command: list[str], **_kwargs: object) -> subprocess.CompletedProcess[str]: + Path(command[-1]).write_bytes(b"converted mp3") + return subprocess.CompletedProcess(command, 0, "", "") + + with mock.patch("narration_import.shutil.which", return_value=None), mock.patch( + "narration_import.subprocess.run", side_effect=successful_ffmpeg + ) as run: + import_wav(self.directory, self.source, fallback_ffmpeg=fallback) + + self.assertEqual(run.call_args.args[0][0], str(fallback)) + + +if __name__ == "__main__": + unittest.main()