ErrorCollector standarisiert. Warnings werden von getpositions zur routing zu draw durchgereicht.
This commit is contained in:
+55
-12
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user