"""Ergebnistypen eines Laufs: Berichtszeile samt dem Stand, den die Verweisrunde braucht. Ersteller: Pascal Michel Erstellt: 2026-09-30 Doku: docs/code/ergebnis.md · Version und Änderungen: CHANGELOG.md """ from __future__ import annotations from dataclasses import dataclass from pathlib import Path from bookstack.struktur import Ziel # Aktionen, deren Datei danach archiviert wird und deren Seite in den Endindex kommt. ARCHIVIERBAR = ("ANLEGEN", "AKTUALISIEREN", "ÜBERSPRUNGEN") @dataclass class Seitenstand: """Was Durchgang 1 über eine Seite weiß; Eingang der Verweisrunde.""" titel: str rumpf: str # ohne Titelüberschrift, Eingang für konvertiere ziel: Ziel seiten_id: int | None # None nur bei ANLEGEN im Probelauf prioritaet: int | None markdown: str # bildfrei, Verweise nach Index aus Durchgang 1 aufgeloeste_verweise: dict[str, str] offene_verweise: list[str] bildnamen: list[str] bilder: dict[str, str] | None # Tabelle des letzten PUT in Durchgang 1; None = kein PUT @dataclass class Beschreibungsstand: """Was Durchgang 1 über eine Buch- oder Kapitelbeschreibung weiß.""" art: str # "buch" | "kapitel" ziel_id: int vorspann: str html: str aufgeloeste_verweise: dict[str, str] @dataclass class Ergebnis: """Eine Berichtszeile; seite und beschreibung tragen nur Zeilen aus Durchgang 1.""" pfad: Path aktion: str text: str seite: Seitenstand | None = None beschreibung: Beschreibungsstand | None = None def seiten_nutzlast( titel: str, ziel: Ziel, markdown: str, prioritaet: int | None = None ) -> dict[str, object]: """name, markdown, chapter_id (wenn ziel.kapitel_id) sonst book_id, priority wenn nicht None.""" daten: dict[str, object] = {"name": titel, "markdown": markdown} # Bewusst wahr/falsch statt is None: Die Platzhalter-ID 0 geht nie als chapter_id hinaus. if ziel.kapitel_id: daten["chapter_id"] = ziel.kapitel_id else: daten["book_id"] = ziel.buch_id if prioritaet is not None: daten["priority"] = prioritaet return daten