Fix: DataGrabber lädt ohne sn_plan41 (ModuleNotFoundError beim Laden von sn_verfahrensgebiet)

DataGrabber.py hatte einen harten Top-Level-Import von
sn_plan41.modules.listenauswerter.Listenauswerter, obwohl DataGrabber sich
selbst als generischer, plugin-übergreifender Orchestrator dokumentiert.
sn_verfahrensgebiet importiert DataGrabber und instanziiert ihn beim
Plugin-Start – dadurch schlug classFactory() fehl, sobald sn_plan41 nicht
installiert war (ModuleNotFoundError: No module named 'sn_plan41').

Import in die einzige Stelle verschoben, die ihn tatsächlich braucht
(_process_excel_source, nur für Excel-Quellen relevant), mit klarer
Fehlermeldung falls doch mal ohne sn_plan41 eine Excel-Quelle verarbeitet
werden soll.

Fixes sn_verfahrensgebiet#35
This commit is contained in:
Michael Otto
2026-08-31 09:52:48 +02:00
parent 113fda7d04
commit bc9bb20597
+13 -2
View File
@@ -30,7 +30,6 @@ from sn_basis.modules.linkpruefer import Linkpruefer
from sn_basis.modules.layerpruefer import Layerpruefer
from sn_basis.modules.stilpruefer import Stilpruefer
from sn_basis.modules.excel_importer import ExcelImporter
from sn_plan41.modules.listenauswerter import Listenauswerter
SourceType = Literal["service", "database", "excel", "unknown"]
@@ -286,7 +285,19 @@ class DataGrabber:
}
source_dict["rows"].append(result_row)
# Validierung über Listenauswerter
# Validierung über Listenauswerter Import erst hier (statt am Modul-
# anfang), da DataGrabber generisch für alle sn_*-Plugins nutzbar sein
# soll und nicht bei jedem Aufruf zwingend sn_plan41 installiert ist;
# nur die Excel-Quellenverarbeitung braucht Listenauswerter.
try:
from sn_plan41.modules.listenauswerter import Listenauswerter
except ImportError as exc:
raise ImportError(
"Die Verarbeitung von Excel-Quellen benötigt das Plugin "
"sn_plan41 (sn_plan41.modules.listenauswerter.Listenauswerter), "
"das hier nicht installiert ist."
) from exc
listenauswerter = Listenauswerter(self.pruefmanager, self.stil_pruefer or Stilpruefer())
validated, validation_results = listenauswerter.validate_rows(source_dict)
results.extend(validation_results)