[FIX] export_csv: Strecken-Attributnamen auf aktuelles Schema nachgezogen

build_variofoerderer_merkmale las noch die alten Attributnamen ohne
_mm-Suffix (HOEHE_VON, HOEHE_BIS, DELTA_H, DELTA_L) sowie SEITE/WINKEL.
Umbenannt wurden diese in *strecke-attr-front* (ssg_core.lsp) zu
HOEHE_VON_mm/HOEHE_BIS_mm/DELTA_H_mm/DELTA_L_mm bzw. aufgeteilt in
SEITE_AS/SEITE_ES und GF_WINKEL/VF_WINKEL. Da attribs.get() still den
Default "" liefert, blieben die Felder in der Merkmale-Spalte leer statt
einen Fehler zu melden - betroffen waren alle VF_n- UND GF_n-Zeilen
(beide nutzen denselben Builder). export_sivas.py war bereits nachge-
zogen, export_csv.py nicht; aufgefallen ist es nicht, weil
tests/reference/export_raw.json noch die alten Namen enthaelt.

- Attributnamen korrigiert, Alt-Namen per att()-Helper als Fallback,
  damit aeltere export_raw.json-Dateien und noch nicht neu aufgebaute
  Bloecke weiter Werte liefern
- Seite_AS/Seite_ES ersetzen das immer leere Seite
- VF_Winkel neu neben Winkel (= GF_WINKEL)

Geprueft gegen results/export_raw.json (neue Namen) und
tests/reference/export_raw.json (Alt-Namen); Pflichtfelder aus
tests/test_foerderer.py bleiben vorhanden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-30 13:54:28 +02:00
parent 6e28045e36
commit 6c5aaab723
+35 -13
View File
@@ -166,21 +166,43 @@ def build_weiche_merkmale(block, eintrag):
def build_variofoerderer_merkmale(block):
"""Merkmale-Dict fuer einen VF_N- oder GF_N-Streckenblock.
Die Attributnamen folgen dem gemeinsamen Schema *strecke-attr-front* /
*strecke-attr-gruppe* in ssg_core.lsp. Hoehen und Delta-Werte tragen dort
das Einheiten-Suffix _mm; SEITE ist in SEITE_AS/SEITE_ES (Antriebs-/
Endstation) und WINKEL in GF_WINKEL/VF_WINKEL aufgeteilt. Die alten Namen
ohne Suffix werden per Fallback weiter gelesen, damit aeltere
export_raw.json-Dateien (z.B. tests/reference/export_raw.json) und noch
nicht neu aufgebaute Bloecke in der Zeichnung weiterhin Werte liefern.
"""
attribs = block.get("attribs", {})
def att(*keys):
"""Erster nicht-leerer Attributwert; aktuelles Schema zuerst, Alt-Name
als Fallback."""
for key in keys:
value = attribs.get(key)
if value not in (None, ""):
return value
return ""
return {
"Typ": attribs.get("TYP", ""),
"Seite": attribs.get("SEITE", ""),
"Winkel": attribs.get("WINKEL", ""),
"DeltaH_mm": attribs.get("DELTA_H", ""),
"DeltaL_mm": attribs.get("DELTA_L", ""),
"L_VF_m": attribs.get("L_VF_m", ""),
"L_GF_m": attribs.get("L_GF_m", ""),
"Montagehoehe_m": attribs.get("MONTAGEHOEHE_m", ""),
"Hoehe_Von_mm": attribs.get("HOEHE_VON", ""),
"Hoehe_Bis_mm": attribs.get("HOEHE_BIS", ""),
"Antriebfahrtrichtung": attribs.get("ANTRIEBFAHRTRICHTUNG", ""),
"Anzahl_Separator": attribs.get("ANZAHL_SEPARATOR", ""),
"Anzahl_Scanner": attribs.get("ANZAHL_SCANNER", ""),
"Typ": att("TYP"),
"Seite_AS": att("SEITE_AS", "SEITE"),
"Seite_ES": att("SEITE_ES", "SEITE"),
"Winkel": att("GF_WINKEL", "WINKEL"),
"VF_Winkel": att("VF_WINKEL"),
"DeltaH_mm": att("DELTA_H_mm", "DELTA_H"),
"DeltaL_mm": att("DELTA_L_mm", "DELTA_L"),
"L_VF_m": att("L_VF_m"),
"L_GF_m": att("L_GF_m"),
"Montagehoehe_m": att("MONTAGEHOEHE_m"),
"Hoehe_Von_mm": att("HOEHE_VON_mm", "HOEHE_VON"),
"Hoehe_Bis_mm": att("HOEHE_BIS_mm", "HOEHE_BIS"),
"Antriebfahrtrichtung": att("ANTRIEBFAHRTRICHTUNG"),
"Anzahl_Separator": att("ANZAHL_SEPARATOR"),
"Anzahl_Scanner": att("ANZAHL_SCANNER"),
}