Files
claude-werkzeuge/.claude/skills/bookstack-upload/scripts/bookstack/ergebnis.py
T
Pascal MichelandClaude Opus 5.5 fa1c26b407 Erste Fassung: Claude-Werkzeuge aus dem Vault
.vault-tools (ohne trading-plattform-pruefung und watermarks-remover),
.claude/agents, .claude/skills, .claude/workflows, .claude/settings.json.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 11:27:59 +02:00

70 lines
2.1 KiB
Python

"""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