ErrorCollector standarisiert. Warnings werden von getpositions zur routing zu draw durchgereicht.

This commit is contained in:
2025-12-18 16:34:04 +01:00
parent a731889561
commit 9b9d3a8f7c
6 changed files with 235 additions and 28 deletions
+55 -12
View File
@@ -73,16 +73,55 @@ def check_file_in_work(work_dir:Path, filename:Path):
mypath = filename
return (mypath, fexists)
# Helper zum Laden der Error-JSON
def load_error_json(json_path: Path, work_dir: Path):
"""
Lädt die Fehler-JSON-Datei, falls vorhanden.
Args:
json_path (Path): Pfad zur Haupt-JSON-Datei.
work_dir (Path): Arbeitsverzeichnis.
Returns:
tuple: (errors_dict, warnings_dict) oder (None, None) wenn keine Fehler vorhanden.
"""
# Konstruiere Error-JSON-Dateinamen basierend auf der Positions-JSON
basename = json_path.stem
if basename.endswith("_positionsconv"):
basename = basename.replace("_positionsconv", "")
elif basename.endswith("_positionsdraw"):
basename = basename.replace("_positionsdraw", "")
error_json_name = f"{basename}_errors.json"
error_json_path = work_dir / error_json_name
# Prüfen ob Error-JSON existiert
if not error_json_path.exists():
# Auch im gleichen Verzeichnis wie die Positions-JSON prüfen
error_json_path = json_path.parent / error_json_name
if not error_json_path.exists():
return None, None
# Error-JSON laden
try:
error_data = load_json(error_json_path)
errors_dict = error_data.get("errors", None)
warnings_dict = error_data.get("warnings", None)
return errors_dict, warnings_dict
except Exception as e:
print(f"Warnung: Fehler beim Laden der Error-JSON: {e}")
return None, None
# Helper für Export
def do_export(conv_obj:ExcelConverter, mode_str, base_input, output_dir, lines):
def do_export(conv_obj:ExcelConverter, mode_str, base_input, output_dir, lines, getpos_errors=None, getpos_warnings=None):
# Für WSCAD Dateinamen anpassen (Export-Typ bleibt "WSCAD" oder "WSCAD mit Bezug")
if mode_str == "WSCAD":
if mode_str == "WSCAD":
if args.no_bezug:
export_type = "WSCAD"
filename = f"{base_input}_WSCAD_no_Bezug.xlsx"
filename = f"{base_input}_WSCAD_no_Bezug.xlsx"
else:
export_type = "WSCAD mit Bezug"
filename = f"{base_input}_WSCAD.xlsx"
filename = f"{base_input}_WSCAD.xlsx"
else:
export_type = mode_str
filename = f"{base_input}_{mode_str}.xlsx"
@@ -90,19 +129,19 @@ def do_export(conv_obj:ExcelConverter, mode_str, base_input, output_dir, lines):
export_path = os.path.join(output_dir, filename)
try:
conv_obj.export_excel(lines, export_type, export_path)
conv_obj.export_excel(lines, export_type, export_path, getpos_errors, getpos_warnings)
print(f"Export '{export_type}' erfolgreich: {export_path}")
except Exception as e:
print(f"Fehler bei Export '{export_type}': {e}")
def do_exports(converter, export_mode, output_dir, base_input, lines):
def do_exports(converter, export_mode, output_dir, base_input, lines, getpos_errors=None, getpos_warnings=None):
if export_mode:
do_export(converter, export_mode, base_input, output_dir, lines)
do_export(converter, export_mode, base_input, output_dir, lines, getpos_errors, getpos_warnings)
else:
# Kein Modus → alle drei exportieren
do_export(converter, "EA", base_input, output_dir, lines)
do_export(converter, "TIA", base_input, output_dir, lines)
do_export(converter, "WSCAD", base_input, output_dir, lines)
do_export(converter, "EA", base_input, output_dir, lines, getpos_errors, getpos_warnings)
do_export(converter, "TIA", base_input, output_dir, lines, getpos_errors, getpos_warnings)
do_export(converter, "WSCAD", base_input, output_dir, lines, getpos_errors, getpos_warnings)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Excel-Konverter für BMK-Daten")
@@ -176,12 +215,16 @@ if __name__ == "__main__":
rawdata = load_json(json_path)
(dsensors, lsensors) = prepare_data(rawdata)
# Fehler-JSON laden (falls vorhanden)
getpos_errors, getpos_warnings = load_error_json(json_path, work_dir)
if len(dsensors) == 0:
do_exports(converter, export_mode, output_dir, basename_out, lsensors)
do_exports(converter, export_mode, output_dir, basename_out, lsensors, getpos_errors, getpos_warnings)
else:
for sps_nr, lines in dsensors.items():
name = f"{basename_out}-{sps_nr}"
do_exports(converter, export_mode, output_dir, name, lines)
do_exports(converter, export_mode, output_dir, name, lines, getpos_errors, getpos_warnings)
else:
parser.print_help()