forked from Daniel/Plugin_SN_Plan41
Pipeline von Tab_A_ui in Tab_a_logic verschoben
This commit is contained in:
@@ -22,11 +22,15 @@ from sn_basis.functions.variable_wrapper import (
|
|||||||
from sn_basis.functions.sys_wrapper import file_exists
|
from sn_basis.functions.sys_wrapper import file_exists
|
||||||
from sn_basis.functions.ly_existence_wrapper import layer_exists
|
from sn_basis.functions.ly_existence_wrapper import layer_exists
|
||||||
from sn_basis.functions.ly_metadata_wrapper import get_layer_type
|
from sn_basis.functions.ly_metadata_wrapper import get_layer_type
|
||||||
|
from sn_basis.functions.qgisui_wrapper import QgsFileWidget
|
||||||
|
|
||||||
# Prüfer-Typen
|
# Prüfer-Typen
|
||||||
from sn_basis.modules.Pruefmanager import Pruefmanager
|
from sn_basis.modules.Pruefmanager import Pruefmanager
|
||||||
from sn_basis.modules.linkpruefer import Linkpruefer
|
from sn_basis.modules.linkpruefer import Linkpruefer
|
||||||
from sn_basis.modules.stilpruefer import Stilpruefer
|
from sn_basis.modules.stilpruefer import Stilpruefer
|
||||||
|
from sn_basis.modules.Dateipruefer import Dateipruefer
|
||||||
|
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
||||||
|
from sn_basis.modules.DataGrabber import DataGrabber, SourceType, SourceDict
|
||||||
|
|
||||||
Row = Dict[str, Any]
|
Row = Dict[str, Any]
|
||||||
DataDict = Dict[str, List[Row]]
|
DataDict = Dict[str, List[Row]]
|
||||||
@@ -34,13 +38,14 @@ DataDict = Dict[str, List[Row]]
|
|||||||
class TabALogic:
|
class TabALogic:
|
||||||
"""
|
"""
|
||||||
Kapselt die Fachlogik von Tab A. Verfahrens-DB wird **nicht** bei Pfad-Auswahl,
|
Kapselt die Fachlogik von Tab A. Verfahrens-DB wird **nicht** bei Pfad-Auswahl,
|
||||||
sondern erst beim ersten Layer-Schreiben angelegt (alte Logik).
|
sondern erst beim ersten Layer-Schreiben angelegt.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, pruefmanager: Pruefmanager, link_pruefer: Linkpruefer, stil_pruefer: Stilpruefer) -> None:
|
def __init__(self, pruefmanager: Pruefmanager, link_pruefer: Linkpruefer, stil_pruefer: Stilpruefer) -> None:
|
||||||
self.pruefmanager = pruefmanager
|
self.pruefmanager = pruefmanager
|
||||||
self.link_pruefer = link_pruefer
|
self.link_pruefer = link_pruefer
|
||||||
self.stil_pruefer = stil_pruefer
|
self.stil_pruefer = stil_pruefer
|
||||||
|
self.data_grabber: Optional[DataGrabber] = None
|
||||||
|
|
||||||
# -------------------------------
|
# -------------------------------
|
||||||
# Verfahrens-Datenbank (Pfad-Management)
|
# Verfahrens-Datenbank (Pfad-Management)
|
||||||
@@ -163,3 +168,83 @@ class TabALogic:
|
|||||||
|
|
||||||
layer_type = get_layer_type(layer)
|
layer_type = get_layer_type(layer)
|
||||||
return layer_type == "vector"
|
return layer_type == "vector"
|
||||||
|
|
||||||
|
# === PIPELINE ===
|
||||||
|
def _on_run_pipeline(self,source: str) -> None:
|
||||||
|
"""DEBUG: Pipeline mit maximaler Ausgabe."""
|
||||||
|
print("\n" + "="*60)
|
||||||
|
print("🚀 _on_run_pipeline GESTARTET")
|
||||||
|
print("="*60)
|
||||||
|
# 🔥 DEBUG QT STATUS
|
||||||
|
from sn_basis.functions import qt_wrapper
|
||||||
|
qt_wrapper.debug_qt_status() # ← Zeigt Version an
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 1. Services prüfen
|
||||||
|
print(f"pruefmanager: {self.pruefmanager is not None}")
|
||||||
|
print(f"data_grabber: {self.data_grabber is not None}")
|
||||||
|
print(f"logic: {hasattr(self, 'logic')}")
|
||||||
|
|
||||||
|
if not self.pruefmanager:
|
||||||
|
print("❌ FEHLER: self.pruefmanager fehlt!")
|
||||||
|
return
|
||||||
|
if not self.data_grabber:
|
||||||
|
print("❌ FEHLER: self.data_grabber fehlt!")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("✅ Services OK")
|
||||||
|
|
||||||
|
# 2. FileWidget
|
||||||
|
#source = self.file_widget.filePath()
|
||||||
|
print(f"📁 Eingabe: '{source}' (len={len(source or '')})")
|
||||||
|
|
||||||
|
# 3. Dateipruefer
|
||||||
|
print("🔍 Dateipruefer starte...")
|
||||||
|
try:
|
||||||
|
pruefer = Dateipruefer(
|
||||||
|
source,
|
||||||
|
basis_pfad="",
|
||||||
|
leereingabe_erlaubt=False,
|
||||||
|
standarddatei=None,
|
||||||
|
temporaer_erlaubt=True, # ✅ Explizit True
|
||||||
|
verfahrens_db_modus=True # ✅ Keyword-only
|
||||||
|
)
|
||||||
|
ergebnis1 = pruefer.pruefe()
|
||||||
|
print(f" → ok={ergebnis1.ok}, aktion='{ergebnis1.aktion}', kontext={ergebnis1.kontext}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"💥 Dateipruefer FEHLER: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
|
# 4. Pruefmanager
|
||||||
|
print("🤖 Pruefmanager starte...")
|
||||||
|
try:
|
||||||
|
ergebnis2 = self.pruefmanager.verarbeite(ergebnis1)
|
||||||
|
|
||||||
|
print(f" → ok={ergebnis2.ok}, aktion='{ergebnis2.aktion}', kontext={ergebnis2.kontext}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"💥 Pruefmanager FEHLER: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
return
|
||||||
|
|
||||||
|
# 5. Entscheidung
|
||||||
|
weiter = ergebnis2.ok
|
||||||
|
print(f"➡️ Weiter? {weiter} (aktion='{ergebnis2.aktion}')")
|
||||||
|
|
||||||
|
if weiter:
|
||||||
|
final_pfad = ergebnis2.kontext if ergebnis2.kontext else source
|
||||||
|
print(f"🚀 DataGrabber mit: '{final_pfad}'")
|
||||||
|
try:
|
||||||
|
self.data_grabber.run(final_pfad)
|
||||||
|
print("✅ DataGrabber aufgerufen!")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"💥 DataGrabber FEHLER: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
else:
|
||||||
|
print("⏹️ Pipeline gestoppt (erwartet bei leerem Pfad)")
|
||||||
|
|
||||||
|
print("="*60 + "\n")
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ from sn_basis.modules.Pruefmanager import Pruefmanager
|
|||||||
from sn_basis.modules.DataGrabber import DataGrabber
|
from sn_basis.modules.DataGrabber import DataGrabber
|
||||||
from sn_basis.modules.Dateipruefer import Dateipruefer
|
from sn_basis.modules.Dateipruefer import Dateipruefer
|
||||||
from sn_plan41.ui.tab_a_logic import TabALogic
|
from sn_plan41.ui.tab_a_logic import TabALogic
|
||||||
|
from sn_basis.modules.linkpruefer import Linkpruefer
|
||||||
|
from sn_basis.modules.stilpruefer import Stilpruefer
|
||||||
|
|
||||||
# Konstanten
|
# Konstanten
|
||||||
RAUMFILTER_VAR = "Raumfilter"
|
RAUMFILTER_VAR = "Raumfilter"
|
||||||
@@ -65,7 +67,7 @@ class TabA(QWidget):
|
|||||||
|
|
||||||
# Services (werden von DockWidget gesetzt)
|
# Services (werden von DockWidget gesetzt)
|
||||||
self.pruefmanager: Optional[Pruefmanager] = None
|
self.pruefmanager: Optional[Pruefmanager] = None
|
||||||
self.data_grabber: Optional[DataGrabber] = None
|
|
||||||
self.logic: Optional[TabALogic] = None
|
self.logic: Optional[TabALogic] = None
|
||||||
|
|
||||||
# UI-State
|
# UI-State
|
||||||
@@ -89,6 +91,14 @@ class TabA(QWidget):
|
|||||||
"""
|
"""
|
||||||
self.pruefmanager = pruefmanager
|
self.pruefmanager = pruefmanager
|
||||||
self.data_grabber = data_grabber
|
self.data_grabber = data_grabber
|
||||||
|
self.logic = TabALogic(
|
||||||
|
pruefmanager=self.pruefmanager,
|
||||||
|
link_pruefer=Linkpruefer(),
|
||||||
|
stil_pruefer=Stilpruefer(),
|
||||||
|
)
|
||||||
|
|
||||||
|
# DataGrabber in die Logik injizieren
|
||||||
|
self.logic.data_grabber = self.data_grabber
|
||||||
|
|
||||||
def _build_ui(self) -> None:
|
def _build_ui(self) -> None:
|
||||||
"""Erstellt die komplette UI-Hierarchie mit allen Gruppen."""
|
"""Erstellt die komplette UI-Hierarchie mit allen Gruppen."""
|
||||||
@@ -175,7 +185,7 @@ class TabA(QWidget):
|
|||||||
# === PIPELINE-STEUERUNG ===
|
# === PIPELINE-STEUERUNG ===
|
||||||
self.btn_pipeline = QPushButton("Fachdaten laden")
|
self.btn_pipeline = QPushButton("Fachdaten laden")
|
||||||
self.btn_pipeline.setToolTip("Starte Pipeline: Linkliste → DataGrabber → Datenschreiber → Log")
|
self.btn_pipeline.setToolTip("Starte Pipeline: Linkliste → DataGrabber → Datenschreiber → Log")
|
||||||
self.btn_pipeline.clicked.connect(self._on_run_pipeline)
|
self.btn_pipeline.clicked.connect(self._on_load_fachdaten)
|
||||||
main_layout.addWidget(self.btn_pipeline)
|
main_layout.addWidget(self.btn_pipeline)
|
||||||
|
|
||||||
|
|
||||||
@@ -264,92 +274,14 @@ class TabA(QWidget):
|
|||||||
def _update_group_color(self) -> None:
|
def _update_group_color(self) -> None:
|
||||||
"""Visuelles Feedback für Verfahrens-DB-Status."""
|
"""Visuelles Feedback für Verfahrens-DB-Status."""
|
||||||
if self.verfahrens_db:
|
if self.verfahrens_db:
|
||||||
self.group_button.setStyleSheet("font-weight: bold; background-color: #e0f7e0;")
|
self.group_button.setStyleSheet("font-weight: bold; background-color: ##d7a8ff;")
|
||||||
else:
|
else:
|
||||||
self.group_button.setStyleSheet("font-weight: bold;")
|
self.group_button.setStyleSheet("font-weight: bold;")
|
||||||
|
|
||||||
# === PIPELINE ===
|
|
||||||
def _on_run_pipeline(self) -> None:
|
|
||||||
"""DEBUG: Pipeline mit maximaler Ausgabe."""
|
|
||||||
print("\n" + "="*60)
|
|
||||||
print("🚀 _on_run_pipeline GESTARTET")
|
|
||||||
print("="*60)
|
|
||||||
# 🔥 DEBUG QT STATUS
|
|
||||||
from sn_basis.functions import qt_wrapper
|
|
||||||
qt_wrapper.debug_qt_status() # ← Zeigt EXAKT was läuft!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 1. Services prüfen
|
|
||||||
print(f"pruefmanager: {self.pruefmanager is not None}")
|
|
||||||
print(f"data_grabber: {self.data_grabber is not None}")
|
|
||||||
print(f"logic: {hasattr(self, 'logic')}")
|
|
||||||
|
|
||||||
if not self.pruefmanager:
|
|
||||||
print("❌ FEHLER: self.pruefmanager fehlt!")
|
|
||||||
return
|
|
||||||
if not self.data_grabber:
|
|
||||||
print("❌ FEHLER: self.data_grabber fehlt!")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("✅ Services OK")
|
|
||||||
|
|
||||||
# 2. FileWidget
|
|
||||||
source = self.file_widget.filePath()
|
|
||||||
print(f"📁 Eingabe: '{source}' (len={len(source or '')})")
|
|
||||||
|
|
||||||
# 3. Dateipruefer
|
|
||||||
print("🔍 Dateipruefer starte...")
|
|
||||||
try:
|
|
||||||
pruefer = Dateipruefer(
|
|
||||||
source,
|
|
||||||
basis_pfad="",
|
|
||||||
leereingabe_erlaubt=False,
|
|
||||||
standarddatei=None,
|
|
||||||
temporaer_erlaubt=True, # ✅ Explizit True
|
|
||||||
verfahrens_db_modus=True # ✅ Keyword-only
|
|
||||||
)
|
|
||||||
ergebnis1 = pruefer.pruefe()
|
|
||||||
print(f" → ok={ergebnis1.ok}, aktion='{ergebnis1.aktion}', kontext={ergebnis1.kontext}")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"💥 Dateipruefer FEHLER: {e}")
|
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
|
||||||
return
|
|
||||||
|
|
||||||
# 4. Pruefmanager
|
|
||||||
print("🤖 Pruefmanager starte...")
|
|
||||||
try:
|
|
||||||
ergebnis2 = self.pruefmanager.verarbeite(ergebnis1)
|
|
||||||
|
|
||||||
print(f" → ok={ergebnis2.ok}, aktion='{ergebnis2.aktion}', kontext={ergebnis2.kontext}")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"💥 Pruefmanager FEHLER: {e}")
|
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
|
||||||
return
|
|
||||||
|
|
||||||
# 5. Entscheidung
|
|
||||||
weiter = ergebnis2.ok
|
|
||||||
print(f"➡️ Weiter? {weiter} (aktion='{ergebnis2.aktion}')")
|
|
||||||
|
|
||||||
if weiter:
|
|
||||||
final_pfad = ergebnis2.kontext if ergebnis2.kontext else source
|
|
||||||
print(f"🚀 DataGrabber mit: '{final_pfad}'")
|
|
||||||
try:
|
|
||||||
self.data_grabber.run(final_pfad)
|
|
||||||
print("✅ DataGrabber aufgerufen!")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"💥 DataGrabber FEHLER: {e}")
|
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
|
||||||
else:
|
|
||||||
print("⏹️ Pipeline gestoppt (erwartet bei leerem Pfad)")
|
|
||||||
|
|
||||||
print("="*60 + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _on_load_fachdaten(self) -> None:
|
def _on_load_fachdaten(self) -> None:
|
||||||
"""Kompatibilitäts-Handler → neue Pipeline."""
|
"""Kompatibilitäts-Handler → neue Pipeline."""
|
||||||
self._on_run_pipeline()
|
source=self.file_widget.filePath()
|
||||||
|
self.logic._on_run_pipeline(source)
|
||||||
|
|||||||
Reference in New Issue
Block a user