PDF-Ordnerstruktur auf 'new', 'ref' und 'diff' umgestellt

Die PDF-Generierung verwendet nun die Ordner 'new', 'ref' und 'diff'
anstelle von 'output', 'valide' und 'diff'. Dies ermöglicht die
Integration mit MainWindow._load_images(), die PDFs in den Ordnern
'new', 'ref' und 'diff' sucht.

Änderungen:
- output_dir → new_dir (für neu generierte PDFs)
- valide_dir → ref_dir (für Referenz-PDFs)
- Alle Variablen und Log-Meldungen entsprechend angepasst
- Unused import entfernt (typing.Optional)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-12 21:38:24 +01:00
parent ee6ded95ab
commit c699c53a14
2 changed files with 30 additions and 32 deletions
+29 -30
View File
@@ -10,7 +10,6 @@ Dieses Modul implementiert die Transformations-Pipeline:
import logging
import subprocess
from pathlib import Path
from typing import Optional
from datetime import datetime
logger = logging.getLogger(__name__)
@@ -65,13 +64,13 @@ class TransformationJob:
self.diff_pdf_params = diff_pdf_params
# Ausgabe-Verzeichnisse im Projektordner
self.output_dir = project_dir / "output"
self.valide_dir = project_dir / "valide"
self.new_dir = project_dir / "new"
self.ref_dir = project_dir / "ref"
self.diff_dir = project_dir / "diff"
# Stelle sicher, dass Ausgabe-Verzeichnisse existieren
self.output_dir.mkdir(exist_ok=True)
self.valide_dir.mkdir(exist_ok=True)
self.new_dir.mkdir(exist_ok=True)
self.ref_dir.mkdir(exist_ok=True)
self.diff_dir.mkdir(exist_ok=True)
# Dateinamen basierend auf XML-Datei + XSL-ID
@@ -85,9 +84,9 @@ class TransformationJob:
else:
file_name_base = base_name
self.temp_fo = self.output_dir / f"{file_name_base}.fo"
self.output_pdf = self.output_dir / f"{file_name_base}.pdf"
self.valide_pdf = self.valide_dir / f"{file_name_base}.pdf"
self.temp_fo = self.new_dir / f"{file_name_base}.fo"
self.new_pdf = self.new_dir / f"{file_name_base}.pdf"
self.ref_pdf = self.ref_dir / f"{file_name_base}.pdf"
self.diff_pdf = self.diff_dir / f"{file_name_base}.pdf"
# Apache FOP Binaries (plattformabhängig)
@@ -104,13 +103,13 @@ class TransformationJob:
Prüft, ob die Transformation aktuell ist.
Returns:
bool: True wenn Output-PDF existiert und aktueller ist als alle Inputs
bool: True wenn New-PDF existiert und aktueller ist als alle Inputs
"""
if not self.output_pdf.exists():
logger.debug(f"Output-PDF existiert nicht: {self.output_pdf}")
if not self.new_pdf.exists():
logger.debug(f"New-PDF existiert nicht: {self.new_pdf}")
return False
output_mtime = self.output_pdf.stat().st_mtime
output_mtime = self.new_pdf.stat().st_mtime
# Prüfe XML-Datei
xml_abs = self.project_dir / self.xml_file
@@ -123,7 +122,7 @@ class TransformationJob:
logger.debug(f"XSL-Datei ist neuer: {self.xsl_file}")
return False
logger.debug(f"Transformation ist aktuell: {self.output_pdf}")
logger.debug(f"Transformation ist aktuell: {self.new_pdf}")
return True
def transform_saxon(self, force: bool = False) -> tuple[bool, str]:
@@ -233,7 +232,7 @@ class TransformationJob:
"-c", str(self.fop_conf) if self.fop_conf.exists() else "",
"-r",
"-fo", str(self.temp_fo),
"-pdf", str(self.output_pdf),
"-pdf", str(self.new_pdf),
]
# Entferne leere Config-Parameter wenn fop.xconf nicht existiert
@@ -260,16 +259,16 @@ class TransformationJob:
logger.warning(f"Konnte FO-Datei nicht löschen: {e}")
if result.returncode == 0:
# Wenn kein Valide-PDF existiert, erstelle es
if not self.valide_pdf.exists():
# Wenn kein Ref-PDF existiert, erstelle es
if not self.ref_pdf.exists():
try:
import shutil
shutil.copy2(self.output_pdf, self.valide_pdf)
logger.info(f"Valide-PDF erstellt: {self.valide_pdf}")
shutil.copy2(self.new_pdf, self.ref_pdf)
logger.info(f"Ref-PDF erstellt: {self.ref_pdf}")
except Exception as e:
logger.warning(f"Konnte Valide-PDF nicht erstellen: {e}")
logger.warning(f"Konnte Ref-PDF nicht erstellen: {e}")
logger.info(f"PDF-Generierung erfolgreich: {self.output_pdf}")
logger.info(f"PDF-Generierung erfolgreich: {self.new_pdf}")
return True, "Erfolgreich"
else:
error_msg = f"FOP-Fehler (Exit {result.returncode}):\nStdOut: {result.stdout}\nStdErr: {result.stderr}"
@@ -287,19 +286,19 @@ class TransformationJob:
def compare_pdf(self) -> tuple[bool, str]:
"""
Vergleicht Output-PDF mit Valide-PDF und erstellt ggf. Diff-PDF.
Vergleicht New-PDF mit Ref-PDF und erstellt ggf. Diff-PDF.
Returns:
tuple[bool, str]: (PDFs sind identisch, Fehlermeldung/Info)
"""
# Prüfe ob beide PDFs existieren
if not self.valide_pdf.exists():
info_msg = "Kein Valide-PDF vorhanden (wird beim nächsten Build erstellt)"
if not self.ref_pdf.exists():
info_msg = "Kein Ref-PDF vorhanden (wird beim nächsten Build erstellt)"
logger.info(info_msg)
return True, info_msg
if not self.output_pdf.exists():
error_msg = f"Output-PDF nicht gefunden: {self.output_pdf}"
if not self.new_pdf.exists():
error_msg = f"New-PDF nicht gefunden: {self.new_pdf}"
logger.error(error_msg)
return False, error_msg
@@ -309,8 +308,8 @@ class TransformationJob:
cmd_compare = [
str(self.diff_pdf_path),
*self.diff_pdf_params,
str(self.valide_pdf),
str(self.output_pdf),
str(self.ref_pdf),
str(self.new_pdf),
]
logger.debug(f"Kommandozeile Vergleich: {' '.join(cmd_compare)}")
@@ -345,8 +344,8 @@ class TransformationJob:
f"--output-diff={self.diff_pdf}",
*self.diff_pdf_params,
"--mark-differences",
str(self.valide_pdf),
str(self.output_pdf),
str(self.ref_pdf),
str(self.new_pdf),
]
logger.debug(f"Kommandozeile Diff: {' '.join(cmd_diff)}")
@@ -394,7 +393,7 @@ class TransformationJob:
"xml_file": str(self.xml_file),
"steps": {},
"duration": None,
"output_pdf": str(self.output_pdf) if self.output_pdf.exists() else None,
"new_pdf": str(self.new_pdf) if self.new_pdf.exists() else None,
"diff_pdf": str(self.diff_pdf) if self.diff_pdf.exists() else None,
}
+1 -2
View File
@@ -5,7 +5,6 @@ import polars as pl
import shutil
import hashlib
import logging
from concurrent.futures import ThreadPoolExecutor
from typing import List
from PySide6.QtCore import Qt, QSize, QThread, Signal
@@ -2538,7 +2537,7 @@ class MainWindow(QMainWindow):
QMessageBox.information(
self,
"Bereits zugeordnet",
f"Die XML-Datei mit gleichem Inhalt ist bereits in allen ausgewählten XSL-Knoten vorhanden."
"Die XML-Datei mit gleichem Inhalt ist bereits in allen ausgewählten XSL-Knoten vorhanden."
)
except Exception as e: