From 56ff5010c72821af2d5ecf2d5b19a5aec63f0453 Mon Sep 17 00:00:00 2001 From: Simon Steuer Date: Sun, 20 Apr 2025 11:43:07 +0200 Subject: [PATCH] =?UTF-8?q?In=20Funktion=20'get=5Fsivas=5Fbom'=20wird=20nu?= =?UTF-8?q?n=20in=20F=C3=A4llen,=20bei=20denen=20keine=20JSON=20erzeugt=20?= =?UTF-8?q?werden,=20ein=20ValueError=20geschmissen,=20der=20ggf.=20sp?= =?UTF-8?q?=C3=A4ter=20bei=20Bedarf=20per=20Exception=20gehandelt=20werden?= =?UTF-8?q?=20kann=20+=20In=20Funktion=20'get=5Fsivas=5Fteilestamm'=20wird?= =?UTF-8?q?=20nun=20gepr=C3=BCft,=20ob=20das=20Tool=20'KSbExcelExportSivas?= =?UTF-8?q?Teilestamm.exe'=20von=20Hr.=20Jakob=20mit=20den=20angegebenen?= =?UTF-8?q?=20Nummern=20tats=C3=A4chlich=20valide=20CSV's=20generiert=20ha?= =?UTF-8?q?t.=20Das=20ist=20deshalb=20von=20Bedeutung,=20weil=20das=20Tool?= =?UTF-8?q?=20auch=20dann=20CSV's=20erzeugt,=20wenn=20die=20Werte,=20die?= =?UTF-8?q?=20man=20per=20Flag=20'-teilenr'=20bereitstellt,=20nicht=20als?= =?UTF-8?q?=20Nummer=20in=20SIVAS=20vorliegen,=20wie=20z.B.=20'abc'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/update_database.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) 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__':