diff --git a/lib/update_database.py b/lib/update_database.py index 7ec7580..437409f 100644 --- a/lib/update_database.py +++ b/lib/update_database.py @@ -4,6 +4,7 @@ import os import shutil import subprocess import sys +import csv """ @@ -88,9 +89,7 @@ def get_sivas_bom(sivas_id, out_dir=os.environ.get('CREMIG_DATA')): subprocess.run(f'{sivas2json_exe_path} -o {out_dir} --format json -number "{sivas_id}"') if not os.path.isfile(os.path.join(out_dir, sivas_id + ".json")): - print(f"Fehler - Konnte {sivas_id}.json nicht erzeugen. Es handelt sich evtl. um eine Nummer ohne Stückliste. Andernfalls prüfen, ob Teilenummer korrekt geschrieben wurde.") - return False - return True + raise ValueError(f"{sivas_id}.json konnte nicht erzeugt werden. Evtl. Nummer ohne Stückliste.") def get_sivas_teilestamm(sivas_ids, out_dir=os.environ.get('CREMIG_DATA'), overwrite=True): @@ -112,19 +111,29 @@ def get_sivas_teilestamm(sivas_ids, out_dir=os.environ.get('CREMIG_DATA'), overw ids_to_generate = [] for id in sivas_ids: - out_file = os.path.join(out_dir, id + ".csv") - if not overwrite and os.path.isfile(out_file): + if not overwrite and os.path.isfile(os.path.join(out_dir, id + ".csv")): continue - ids_to_generate.append(f'"{id}"') # Anführungszeichen erforderlich, damit Art.Nr. mit Leerzeichen, z.B. "TOS Auswahl ILS" funktionieren + ids_to_generate.append(id) if len(ids_to_generate) == 0: print("CSV-Datei(en) existieren bereits oder angegebene Teilenummer(n) sind bereits migriert") return - ids_to_generate = ",".join(ids_to_generate) + ids_to_generate_str = ",".join([f'"{id}"' for id in ids_to_generate]) # Anführungszeichen erforderlich, damit Art.Nr. mit Leerzeichen, z.B. "TOS Auswahl ILS" funktionieren + os.environ["SIVAS_EXCEL_EXPORT_DIR"] = out_dir # Umgebungsvariable legt Ausgabeverzeichnis der CSV-Dateien im Programm 'KSbExcelExportSivasTeilestamm' fest. Der Variablenname ist durch genanntes Programm vorgegeben, siehe help-Text des Programms! print(f"Erstelle CSV(s) mit Teilestamminformationen...") - subprocess.run(f'{sivas_teilestamm_exe} -teilenr={ids_to_generate} -open_target_dir=n') + subprocess.run(f'{sivas_teilestamm_exe} -teilenr={ids_to_generate_str} -open_target_dir=n') + + # Prüft Existenz der angegebenen SIVAS-Nummern, indem geschaut wird, ob die CSV-Dateien 2 Zeilen aufweisen + # Nicht über Returncode des Subprocess ermittelbar, da dieser immer 0 ist, auch wenn die Nr. nicht in SIVAS existiert + for id in ids_to_generate: + csv_path = os.path.join(out_dir, id + ".csv") + with open(csv_path, encoding="utf-8", newline="") as csv_file: + csv_data = csv.reader(csv_file, delimiter=";") + line_nums = sum(1 for row in csv_data) + if line_nums != 2: + raise ValueError(f"SIVAS-Teilenummer '{id}' existiert nicht! Bitte prüfen, ob Nummer korrekt geschrieben wurde!") if __name__ == '__main__':