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 logging
import subprocess import subprocess
from pathlib import Path from pathlib import Path
from typing import Optional
from datetime import datetime from datetime import datetime
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -65,13 +64,13 @@ class TransformationJob:
self.diff_pdf_params = diff_pdf_params self.diff_pdf_params = diff_pdf_params
# Ausgabe-Verzeichnisse im Projektordner # Ausgabe-Verzeichnisse im Projektordner
self.output_dir = project_dir / "output" self.new_dir = project_dir / "new"
self.valide_dir = project_dir / "valide" self.ref_dir = project_dir / "ref"
self.diff_dir = project_dir / "diff" self.diff_dir = project_dir / "diff"
# Stelle sicher, dass Ausgabe-Verzeichnisse existieren # Stelle sicher, dass Ausgabe-Verzeichnisse existieren
self.output_dir.mkdir(exist_ok=True) self.new_dir.mkdir(exist_ok=True)
self.valide_dir.mkdir(exist_ok=True) self.ref_dir.mkdir(exist_ok=True)
self.diff_dir.mkdir(exist_ok=True) self.diff_dir.mkdir(exist_ok=True)
# Dateinamen basierend auf XML-Datei + XSL-ID # Dateinamen basierend auf XML-Datei + XSL-ID
@@ -85,9 +84,9 @@ class TransformationJob:
else: else:
file_name_base = base_name file_name_base = base_name
self.temp_fo = self.output_dir / f"{file_name_base}.fo" self.temp_fo = self.new_dir / f"{file_name_base}.fo"
self.output_pdf = self.output_dir / f"{file_name_base}.pdf" self.new_pdf = self.new_dir / f"{file_name_base}.pdf"
self.valide_pdf = self.valide_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" self.diff_pdf = self.diff_dir / f"{file_name_base}.pdf"
# Apache FOP Binaries (plattformabhängig) # Apache FOP Binaries (plattformabhängig)
@@ -104,13 +103,13 @@ class TransformationJob:
Prüft, ob die Transformation aktuell ist. Prüft, ob die Transformation aktuell ist.
Returns: 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(): if not self.new_pdf.exists():
logger.debug(f"Output-PDF existiert nicht: {self.output_pdf}") logger.debug(f"New-PDF existiert nicht: {self.new_pdf}")
return False return False
output_mtime = self.output_pdf.stat().st_mtime output_mtime = self.new_pdf.stat().st_mtime
# Prüfe XML-Datei # Prüfe XML-Datei
xml_abs = self.project_dir / self.xml_file xml_abs = self.project_dir / self.xml_file
@@ -123,7 +122,7 @@ class TransformationJob:
logger.debug(f"XSL-Datei ist neuer: {self.xsl_file}") logger.debug(f"XSL-Datei ist neuer: {self.xsl_file}")
return False return False
logger.debug(f"Transformation ist aktuell: {self.output_pdf}") logger.debug(f"Transformation ist aktuell: {self.new_pdf}")
return True return True
def transform_saxon(self, force: bool = False) -> tuple[bool, str]: 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 "", "-c", str(self.fop_conf) if self.fop_conf.exists() else "",
"-r", "-r",
"-fo", str(self.temp_fo), "-fo", str(self.temp_fo),
"-pdf", str(self.output_pdf), "-pdf", str(self.new_pdf),
] ]
# Entferne leere Config-Parameter wenn fop.xconf nicht existiert # 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}") logger.warning(f"Konnte FO-Datei nicht löschen: {e}")
if result.returncode == 0: if result.returncode == 0:
# Wenn kein Valide-PDF existiert, erstelle es # Wenn kein Ref-PDF existiert, erstelle es
if not self.valide_pdf.exists(): if not self.ref_pdf.exists():
try: try:
import shutil import shutil
shutil.copy2(self.output_pdf, self.valide_pdf) shutil.copy2(self.new_pdf, self.ref_pdf)
logger.info(f"Valide-PDF erstellt: {self.valide_pdf}") logger.info(f"Ref-PDF erstellt: {self.ref_pdf}")
except Exception as e: 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" return True, "Erfolgreich"
else: else:
error_msg = f"FOP-Fehler (Exit {result.returncode}):\nStdOut: {result.stdout}\nStdErr: {result.stderr}" 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]: 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: Returns:
tuple[bool, str]: (PDFs sind identisch, Fehlermeldung/Info) tuple[bool, str]: (PDFs sind identisch, Fehlermeldung/Info)
""" """
# Prüfe ob beide PDFs existieren # Prüfe ob beide PDFs existieren
if not self.valide_pdf.exists(): if not self.ref_pdf.exists():
info_msg = "Kein Valide-PDF vorhanden (wird beim nächsten Build erstellt)" info_msg = "Kein Ref-PDF vorhanden (wird beim nächsten Build erstellt)"
logger.info(info_msg) logger.info(info_msg)
return True, info_msg return True, info_msg
if not self.output_pdf.exists(): if not self.new_pdf.exists():
error_msg = f"Output-PDF nicht gefunden: {self.output_pdf}" error_msg = f"New-PDF nicht gefunden: {self.new_pdf}"
logger.error(error_msg) logger.error(error_msg)
return False, error_msg return False, error_msg
@@ -309,8 +308,8 @@ class TransformationJob:
cmd_compare = [ cmd_compare = [
str(self.diff_pdf_path), str(self.diff_pdf_path),
*self.diff_pdf_params, *self.diff_pdf_params,
str(self.valide_pdf), str(self.ref_pdf),
str(self.output_pdf), str(self.new_pdf),
] ]
logger.debug(f"Kommandozeile Vergleich: {' '.join(cmd_compare)}") logger.debug(f"Kommandozeile Vergleich: {' '.join(cmd_compare)}")
@@ -345,8 +344,8 @@ class TransformationJob:
f"--output-diff={self.diff_pdf}", f"--output-diff={self.diff_pdf}",
*self.diff_pdf_params, *self.diff_pdf_params,
"--mark-differences", "--mark-differences",
str(self.valide_pdf), str(self.ref_pdf),
str(self.output_pdf), str(self.new_pdf),
] ]
logger.debug(f"Kommandozeile Diff: {' '.join(cmd_diff)}") logger.debug(f"Kommandozeile Diff: {' '.join(cmd_diff)}")
@@ -394,7 +393,7 @@ class TransformationJob:
"xml_file": str(self.xml_file), "xml_file": str(self.xml_file),
"steps": {}, "steps": {},
"duration": None, "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, "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 shutil
import hashlib import hashlib
import logging import logging
from concurrent.futures import ThreadPoolExecutor
from typing import List from typing import List
from PySide6.QtCore import Qt, QSize, QThread, Signal from PySide6.QtCore import Qt, QSize, QThread, Signal
@@ -2538,7 +2537,7 @@ class MainWindow(QMainWindow):
QMessageBox.information( QMessageBox.information(
self, self,
"Bereits zugeordnet", "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: except Exception as e: