Feature: Prüfung auf Existenz von XML- und XSL-Dateien vor Transformation

- Prüfe ob XML- und XSL-Dateien existieren bevor TransformationJobs erstellt werden
- Zeige detaillierte Fehlermeldungen wenn Dateien fehlen
- Zähle und melde übersprungene Jobs bei Batch-Verarbeitung
- Verhindere mehrfache Fehlerdialoge durch zentrale Fehlerbehandlung
- Logge fehlende Dateien mit vollständigen Pfaden für einfaches Debugging
This commit is contained in:
2026-01-22 19:37:53 +01:00
parent d74dfd20e5
commit afff427f67
+64 -2
View File
@@ -108,6 +108,13 @@ class TransformationMixin:
# Erstelle TransformationJob mit TreeWidgetItem-Kontext für Parameter-Sammlung # Erstelle TransformationJob mit TreeWidgetItem-Kontext für Parameter-Sammlung
job = self._create_transformation_job(xsl_file_obj, xml_file_obj, parent_item) job = self._create_transformation_job(xsl_file_obj, xml_file_obj, parent_item)
if not job: if not job:
QMessageBox.warning(
self,
"Fehler",
"Transformation kann nicht gestartet werden.\n\n"
"Bitte überprüfen Sie, ob XML- und XSL-Dateien existieren.\n"
"Details finden Sie im Log.",
)
return return
# Starte Transformation in separatem Thread # Starte Transformation in separatem Thread
@@ -140,16 +147,35 @@ class TransformationMixin:
# Erstelle TransformationJobs für alle XML-Dateien # Erstelle TransformationJobs für alle XML-Dateien
jobs = [] jobs = []
skipped_count = 0
for xml_file_obj in xsl_file_obj.xmls: for xml_file_obj in xsl_file_obj.xmls:
# Übergebe das XslFile-TreeWidgetItem für Parameter-Sammlung # Übergebe das XslFile-TreeWidgetItem für Parameter-Sammlung
job = self._create_transformation_job(xsl_file_obj, xml_file_obj, item) job = self._create_transformation_job(xsl_file_obj, xml_file_obj, item)
if job: if job:
jobs.append(job) jobs.append(job)
else:
skipped_count += 1
if not jobs: if not jobs:
QMessageBox.warning(self, "Fehler", "Konnte keine Transformations-Jobs erstellen") QMessageBox.warning(
self,
"Fehler",
f"Konnte keine gültigen Transformations-Jobs erstellen.\n\n"
f"{skipped_count} XML-Datei(en) wurden übersprungen (fehlende Dateien).",
)
return return
# Informiere Benutzer wenn einige Jobs übersprungen wurden
if skipped_count > 0:
logger.warning(f"{skipped_count} von {len(xsl_file_obj.xmls)} Jobs übersprungen (fehlende Dateien)")
QMessageBox.warning(
self,
"Warnung",
f"{skipped_count} von {len(xsl_file_obj.xmls)} XML-Datei(en) werden übersprungen "
f"(fehlende XML- oder XSL-Dateien).\n\n"
f"{len(jobs)} Job(s) werden ausgeführt.",
)
# Starte Transformation in separatem Thread # Starte Transformation in separatem Thread
self._start_transformation(jobs, force=force) self._start_transformation(jobs, force=force)
@@ -311,16 +337,35 @@ class TransformationMixin:
# Erstelle TransformationJobs für alle XML-Dateien # Erstelle TransformationJobs für alle XML-Dateien
jobs = [] jobs = []
skipped_count = 0
for xsl_file_obj, xml_file_obj, xsl_file_item in xsl_xml_pairs: for xsl_file_obj, xml_file_obj, xsl_file_item in xsl_xml_pairs:
# Übergebe das XslFile-TreeWidgetItem für Parameter-Sammlung # Übergebe das XslFile-TreeWidgetItem für Parameter-Sammlung
job = self._create_transformation_job(xsl_file_obj, xml_file_obj, xsl_file_item) job = self._create_transformation_job(xsl_file_obj, xml_file_obj, xsl_file_item)
if job: if job:
jobs.append(job) jobs.append(job)
else:
skipped_count += 1
if not jobs: if not jobs:
QMessageBox.warning(self, "Fehler", "Konnte keine Transformations-Jobs erstellen") QMessageBox.warning(
self,
"Fehler",
f"Konnte keine gültigen Transformations-Jobs erstellen.\n\n"
f"{skipped_count} XML-Datei(en) wurden übersprungen (fehlende Dateien).",
)
return return
# Informiere Benutzer wenn einige Jobs übersprungen wurden
if skipped_count > 0:
logger.warning(f"{skipped_count} von {len(xsl_xml_pairs)} Jobs übersprungen (fehlende Dateien)")
QMessageBox.warning(
self,
"Warnung",
f"{skipped_count} von {len(xsl_xml_pairs)} XML-Datei(en) werden übersprungen "
f"(fehlende XML- oder XSL-Dateien).\n\n"
f"{len(jobs)} Job(s) werden ausgeführt.",
)
logger.info(f"Starte Transformation für {len(jobs)} XML-Dateien unter TreeNode '{tree_node_obj.bez}'") logger.info(f"Starte Transformation für {len(jobs)} XML-Dateien unter TreeNode '{tree_node_obj.bez}'")
# Starte Transformation in separatem Thread # Starte Transformation in separatem Thread
@@ -399,6 +444,23 @@ class TransformationMixin:
# Erstelle absoluten Pfad zur XSL-Datei # Erstelle absoluten Pfad zur XSL-Datei
xsl_file_abs = xsl_dir.path_to_root_dir / xsl_file_obj.xsl_file xsl_file_abs = xsl_dir.path_to_root_dir / xsl_file_obj.xsl_file
# Prüfe ob XSL-Datei existiert
if not xsl_file_abs.exists():
error_msg = f"XSL-Datei nicht gefunden: {xsl_file_abs}"
logger.error(error_msg)
# Kein MessageBox hier - wird in der aufrufenden Funktion behandelt
return None
# Erstelle absoluten Pfad zur XML-Datei
xml_file_abs = self.project.project_dir / xml_file_obj.xml
# Prüfe ob XML-Datei existiert
if not xml_file_abs.exists():
error_msg = f"XML-Datei nicht gefunden: {xml_file_abs}"
logger.error(error_msg)
# Kein MessageBox hier - wird in der aufrufenden Funktion behandelt
return None
# Sammle XSLT-Parameter hierarchisch (TreeNode-Eltern → XslFile) # Sammle XSLT-Parameter hierarchisch (TreeNode-Eltern → XslFile)
xslt_params = {} xslt_params = {}