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:
@@ -17,6 +17,7 @@ if TYPE_CHECKING:
|
||||
from saxon_pool import SaxonWorkerPool
|
||||
from saxon_pool_s9api import SaxonWorkerPoolS9Api
|
||||
from fop_pool import FopWorkerPool
|
||||
from xsl_dependencies import XslDependencyGraph
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -81,6 +82,7 @@ class TransformationJob:
|
||||
diff_pdf_params: list[str],
|
||||
xsl_id: tuple | None = None,
|
||||
fop_config_dir: Path | None = None,
|
||||
dependency_graph: Optional["XslDependencyGraph"] = None,
|
||||
):
|
||||
"""
|
||||
Initialisiert einen Transformations-Job.
|
||||
@@ -97,6 +99,7 @@ class TransformationJob:
|
||||
diff_pdf_params: Standard-Parameter für diff-pdf
|
||||
xsl_id: ID der XSL-Datei (als Tuple)
|
||||
fop_config_dir: Optionaler Pfad zum FOP-Config-Verzeichnis (überschreibt Standardpfad)
|
||||
dependency_graph: Optionaler XSL-Abhängigkeitsgraph für Import/Include-Prüfung
|
||||
"""
|
||||
self.project_dir = project_dir
|
||||
self.xml_file = xml_file # Relativ
|
||||
@@ -111,6 +114,7 @@ class TransformationJob:
|
||||
self.fop_config_dir = fop_config_dir
|
||||
self.diff_pdf_path = diff_pdf_path
|
||||
self.diff_pdf_params = diff_pdf_params
|
||||
self.dependency_graph = dependency_graph
|
||||
|
||||
# Ausgabe-Verzeichnisse im Projektordner
|
||||
self.new_dir = project_dir / "new"
|
||||
@@ -176,6 +180,13 @@ class TransformationJob:
|
||||
logger.debug(f"XSL-Datei ist neuer: {self.xsl_file}")
|
||||
return False
|
||||
|
||||
# Prüfe importierte/inkludierte XSL-Dateien (transitiv)
|
||||
if self.dependency_graph and self.xsl_file.exists():
|
||||
for dep_xsl in self.dependency_graph.get_dependencies(self.xsl_file):
|
||||
if dep_xsl.exists() and dep_xsl.stat().st_mtime > output_mtime:
|
||||
logger.debug(f"Importierte XSL-Datei ist neuer: {dep_xsl}")
|
||||
return False
|
||||
|
||||
logger.debug(f"Transformation ist aktuell: {self.new_pdf}")
|
||||
return True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user