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:
+29
-30
@@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user