Format der SivasNummer ohne +
This commit is contained in:
+11
-2
@@ -52,6 +52,15 @@ def build_lookup(boegen, weichen):
|
|||||||
return lookup
|
return lookup
|
||||||
|
|
||||||
|
|
||||||
|
def format_sivasnr(sivasnr):
|
||||||
|
"""
|
||||||
|
Wandelt einen "+"-separierten Sivasnr-Wert (Rohformat aus den JSON-Katalogen,
|
||||||
|
dort weiterhin benoetigt fuer Dateinamen-Referenzen) in eine reine
|
||||||
|
kommaseparierte Liste fuer die Ausgabe (CSV/Block-Attribut) um.
|
||||||
|
"""
|
||||||
|
return ", ".join(p.strip() for p in str(sivasnr).split("+") if p.strip())
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Merkmale-Builder
|
# Merkmale-Builder
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -80,7 +89,7 @@ def build_bogen_merkmale(block, eintrag):
|
|||||||
"Radius": float(eintrag.get("Radius", 0)),
|
"Radius": float(eintrag.get("Radius", 0)),
|
||||||
"Höhe": get_hoehe(block),
|
"Höhe": get_hoehe(block),
|
||||||
"Drehung": get_drehung(block),
|
"Drehung": get_drehung(block),
|
||||||
"SivasNummer": str(eintrag.get("Sivasnr", ""))
|
"SivasNummer": format_sivasnr(eintrag.get("Sivasnr", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -93,7 +102,7 @@ def build_weiche_merkmale(block, eintrag):
|
|||||||
"Höhe": get_hoehe(block),
|
"Höhe": get_hoehe(block),
|
||||||
"Drehung": get_drehung(block),
|
"Drehung": get_drehung(block),
|
||||||
"Antrieb Kurve": eintrag.get("SivasnrTEF") is not None,
|
"Antrieb Kurve": eintrag.get("SivasnrTEF") is not None,
|
||||||
"SivasNummer": str(eintrag.get("Sivasnr", ""))
|
"SivasNummer": format_sivasnr(eintrag.get("Sivasnr", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+10
-1
@@ -83,6 +83,15 @@ def get_id(block):
|
|||||||
return block.get("attribs", {}).get("ID", "")
|
return block.get("attribs", {}).get("ID", "")
|
||||||
|
|
||||||
|
|
||||||
|
def format_sivasnr(sivasnr):
|
||||||
|
"""
|
||||||
|
Wandelt einen "+"-separierten Sivasnr-Wert (Rohformat aus den JSON-Katalogen,
|
||||||
|
dort weiterhin benoetigt fuer Dateinamen-Referenzen) in eine reine
|
||||||
|
kommaseparierte Liste fuer die Ausgabe (CSV/Block-Attribut) um.
|
||||||
|
"""
|
||||||
|
return ", ".join(p.strip() for p in str(sivasnr).split("+") if p.strip())
|
||||||
|
|
||||||
|
|
||||||
def format_hoehe_m(hoehe_mm_str):
|
def format_hoehe_m(hoehe_mm_str):
|
||||||
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
|
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
|
||||||
try:
|
try:
|
||||||
@@ -190,7 +199,7 @@ def process_blocks(blocks, lookup):
|
|||||||
# --- Omniflo Bogen oder Weiche (erkannt via Katalog) ---
|
# --- Omniflo Bogen oder Weiche (erkannt via Katalog) ---
|
||||||
if bname in lookup:
|
if bname in lookup:
|
||||||
typ, eintrag = lookup[bname]
|
typ, eintrag = lookup[bname]
|
||||||
sivasnr = str(eintrag.get("Sivasnr", bname))
|
sivasnr = format_sivasnr(eintrag.get("Sivasnr", bname))
|
||||||
hoehe = get_hoehe_mm(block)
|
hoehe = get_hoehe_mm(block)
|
||||||
|
|
||||||
if typ == "bogen":
|
if typ == "bogen":
|
||||||
|
|||||||
+16
-8
@@ -149,12 +149,19 @@ def resolve_container_refs(text, container_map):
|
|||||||
kommaseparierte Liste aus [container]. Kommt das Muster mehrfach vor,
|
kommaseparierte Liste aus [container]. Kommt das Muster mehrfach vor,
|
||||||
wird jedes Vorkommen einzeln ersetzt. Unbekannte 0_BG-Werte bleiben
|
wird jedes Vorkommen einzeln ersetzt. Unbekannte 0_BG-Werte bleiben
|
||||||
unveraendert stehen.
|
unveraendert stehen.
|
||||||
|
|
||||||
|
Anschliessend werden verbleibende "+"-Trenner (z.B. zwischen Artikelnr.
|
||||||
|
und 0_BG-Referenz) durch ", " ersetzt, damit SivasNummer ausschliesslich
|
||||||
|
eine kommaseparierte Liste ist.
|
||||||
"""
|
"""
|
||||||
if not container_map or "0_BG" not in text:
|
if container_map and "0_BG" in text:
|
||||||
return text
|
text = CONTAINER_PATTERN.sub(
|
||||||
return CONTAINER_PATTERN.sub(
|
lambda m: container_map.get(m.group(0), m.group(0)), text
|
||||||
lambda m: container_map.get(m.group(0), m.group(0)), text
|
)
|
||||||
)
|
if "+" in text:
|
||||||
|
parts = [p.strip() for p in text.split("+") if p.strip()]
|
||||||
|
text = ", ".join(parts)
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
def resolve_value(source, json_entry, sivasnr, container_map=None):
|
def resolve_value(source, json_entry, sivasnr, container_map=None):
|
||||||
@@ -164,9 +171,10 @@ def resolve_value(source, json_entry, sivasnr, container_map=None):
|
|||||||
- {sivasnr} -> SivasNr-Wert
|
- {sivasnr} -> SivasNr-Wert
|
||||||
- Feldname -> Wert aus json_entry
|
- Feldname -> Wert aus json_entry
|
||||||
|
|
||||||
Wird das Feld "Sivasnr" aufgeloest und enthaelt der Wert ein oder
|
Wird das Feld "Sivasnr" aufgeloest, werden enthaltene 0_BGxxxxxx-Muster
|
||||||
mehrere 0_BGxxxxxx-Muster, werden diese anhand von [container] durch
|
anhand von [container] durch die dort hinterlegte kommaseparierte Liste
|
||||||
die dort hinterlegte kommaseparierte Liste ersetzt.
|
ersetzt und verbleibende "+"-Trenner durch ", " ersetzt, sodass das
|
||||||
|
Ergebnis ausschliesslich eine kommaseparierte Liste ist (keine "+" mehr).
|
||||||
"""
|
"""
|
||||||
source = source.strip()
|
source = source.strip()
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ sys.path.insert(0, _LIB_DIR)
|
|||||||
|
|
||||||
from export_csv import (
|
from export_csv import (
|
||||||
build_lookup, process_blocks, build_bogen_merkmale,
|
build_lookup, process_blocks, build_bogen_merkmale,
|
||||||
build_weiche_merkmale, load_json, format_csv_line
|
build_weiche_merkmale, load_json, format_csv_line, format_sivasnr
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -207,8 +207,8 @@ class TestOmnifloExportUnit:
|
|||||||
assert m["Höhe"] == str(int(tc["hoehe"])), (
|
assert m["Höhe"] == str(int(tc["hoehe"])), (
|
||||||
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
||||||
)
|
)
|
||||||
assert m["SivasNummer"] == str(eintrag["Sivasnr"]), (
|
assert m["SivasNummer"] == format_sivasnr(eintrag["Sivasnr"]), (
|
||||||
f"{sivasnr}: SivasNummer erwartet={eintrag['Sivasnr']}, "
|
f"{sivasnr}: SivasNummer erwartet={format_sivasnr(eintrag['Sivasnr'])}, "
|
||||||
f"erhalten={m['SivasNummer']}"
|
f"erhalten={m['SivasNummer']}"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -233,8 +233,8 @@ class TestOmnifloExportUnit:
|
|||||||
assert m["Höhe"] == str(int(tc["hoehe"])), (
|
assert m["Höhe"] == str(int(tc["hoehe"])), (
|
||||||
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
||||||
)
|
)
|
||||||
assert m["SivasNummer"] == str(eintrag["Sivasnr"]), (
|
assert m["SivasNummer"] == format_sivasnr(eintrag["Sivasnr"]), (
|
||||||
f"{sivasnr}: SivasNummer erwartet={eintrag['Sivasnr']}, "
|
f"{sivasnr}: SivasNummer erwartet={format_sivasnr(eintrag['Sivasnr'])}, "
|
||||||
f"erhalten={m['SivasNummer']}"
|
f"erhalten={m['SivasNummer']}"
|
||||||
)
|
)
|
||||||
expected_antrieb = eintrag.get("SivasnrTEF") is not None
|
expected_antrieb = eintrag.get("SivasnrTEF") is not None
|
||||||
|
|||||||
Reference in New Issue
Block a user