Feat: XSL-Abhängigkeitsgraph für import/include-Erkennung in Transformations-Pipeline

is_up_to_date() prüft nun auch transitiv importierte/inkludierte XSL-Dateien.
Abhängigkeiten werden per Tooltip und Kontextmenü-Aktion im TreeWidget angezeigt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 19:37:05 +01:00
parent 140905af77
commit 71fa48a514
4 changed files with 248 additions and 0 deletions
+7
View File
@@ -15,6 +15,7 @@ from PySide6.QtWidgets import QMessageBox, QProgressBar, QTreeWidgetItem
from conf import app_settings, TreeNode, XslFile, XmlFile
from transform import TransformationJob
from ui.threads import TransformationThread
from xsl_dependencies import XslDependencyGraph
logger = logging.getLogger(__name__)
@@ -31,6 +32,7 @@ class TransformationMixin:
- self.xml_item_map: Mapping von xml_path|xsl_id zu TreeWidgetItems
- self.last_saxon_metrics: Gecachte Saxon-Worker-Pool-Metriken
- self.last_fop_metrics: Gecachte FOP-Worker-Pool-Metriken
- self.xsl_dependency_graph: XslDependencyGraph für Import/Include-Erkennung
Erwartet folgende Methoden von anderen Mixins:
- self._initialize_saxon_worker_pool(): Von WorkerPoolMixin
@@ -494,6 +496,10 @@ class TransformationMixin:
logger.info(f"Finale XSLT-Parameter für {xml_file_obj.xml} mit {xsl_file_obj.bez}: {xslt_params}")
# Initialisiere XSL-Abhängigkeitsgraph (lazy, einmalig pro Mixin-Instanz)
if not hasattr(self, "xsl_dependency_graph") or self.xsl_dependency_graph is None:
self.xsl_dependency_graph = XslDependencyGraph()
# Erstelle TransformationJob
job = TransformationJob(
project_dir=self.project.project_dir,
@@ -507,6 +513,7 @@ class TransformationMixin:
diff_pdf_params=diff_pdf.default_params,
xsl_id=xsl_file_obj.id,
fop_config_dir=self.project.fop_config_dir,
dependency_graph=self.xsl_dependency_graph,
)
return job