Format der SivasNummer ohne +
This commit is contained in:
+11
-2
@@ -52,6 +52,15 @@ def build_lookup(boegen, weichen):
|
||||
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
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -80,7 +89,7 @@ def build_bogen_merkmale(block, eintrag):
|
||||
"Radius": float(eintrag.get("Radius", 0)),
|
||||
"Höhe": get_hoehe(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),
|
||||
"Drehung": get_drehung(block),
|
||||
"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", "")
|
||||
|
||||
|
||||
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):
|
||||
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
|
||||
try:
|
||||
@@ -190,7 +199,7 @@ def process_blocks(blocks, lookup):
|
||||
# --- Omniflo Bogen oder Weiche (erkannt via Katalog) ---
|
||||
if bname in lookup:
|
||||
typ, eintrag = lookup[bname]
|
||||
sivasnr = str(eintrag.get("Sivasnr", bname))
|
||||
sivasnr = format_sivasnr(eintrag.get("Sivasnr", bname))
|
||||
hoehe = get_hoehe_mm(block)
|
||||
|
||||
if typ == "bogen":
|
||||
|
||||
+14
-6
@@ -149,12 +149,19 @@ def resolve_container_refs(text, container_map):
|
||||
kommaseparierte Liste aus [container]. Kommt das Muster mehrfach vor,
|
||||
wird jedes Vorkommen einzeln ersetzt. Unbekannte 0_BG-Werte bleiben
|
||||
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:
|
||||
return text
|
||||
return CONTAINER_PATTERN.sub(
|
||||
if container_map and "0_BG" in text:
|
||||
text = CONTAINER_PATTERN.sub(
|
||||
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):
|
||||
@@ -164,9 +171,10 @@ def resolve_value(source, json_entry, sivasnr, container_map=None):
|
||||
- {sivasnr} -> SivasNr-Wert
|
||||
- Feldname -> Wert aus json_entry
|
||||
|
||||
Wird das Feld "Sivasnr" aufgeloest und enthaelt der Wert ein oder
|
||||
mehrere 0_BGxxxxxx-Muster, werden diese anhand von [container] durch
|
||||
die dort hinterlegte kommaseparierte Liste ersetzt.
|
||||
Wird das Feld "Sivasnr" aufgeloest, werden enthaltene 0_BGxxxxxx-Muster
|
||||
anhand von [container] durch die dort hinterlegte kommaseparierte Liste
|
||||
ersetzt und verbleibende "+"-Trenner durch ", " ersetzt, sodass das
|
||||
Ergebnis ausschliesslich eine kommaseparierte Liste ist (keine "+" mehr).
|
||||
"""
|
||||
source = source.strip()
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ sys.path.insert(0, _LIB_DIR)
|
||||
|
||||
from export_csv import (
|
||||
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"])), (
|
||||
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
||||
)
|
||||
assert m["SivasNummer"] == str(eintrag["Sivasnr"]), (
|
||||
f"{sivasnr}: SivasNummer erwartet={eintrag['Sivasnr']}, "
|
||||
assert m["SivasNummer"] == format_sivasnr(eintrag["Sivasnr"]), (
|
||||
f"{sivasnr}: SivasNummer erwartet={format_sivasnr(eintrag['Sivasnr'])}, "
|
||||
f"erhalten={m['SivasNummer']}"
|
||||
)
|
||||
|
||||
@@ -233,8 +233,8 @@ class TestOmnifloExportUnit:
|
||||
assert m["Höhe"] == str(int(tc["hoehe"])), (
|
||||
f"{sivasnr}: Hoehe erwartet={tc['hoehe']}, erhalten={m['Höhe']}"
|
||||
)
|
||||
assert m["SivasNummer"] == str(eintrag["Sivasnr"]), (
|
||||
f"{sivasnr}: SivasNummer erwartet={eintrag['Sivasnr']}, "
|
||||
assert m["SivasNummer"] == format_sivasnr(eintrag["Sivasnr"]), (
|
||||
f"{sivasnr}: SivasNummer erwartet={format_sivasnr(eintrag['Sivasnr'])}, "
|
||||
f"erhalten={m['SivasNummer']}"
|
||||
)
|
||||
expected_antrieb = eintrag.get("SivasnrTEF") is not None
|
||||
|
||||
Reference in New Issue
Block a user