From 4ce2a022051fe5f8be9714cc9cb07b56f2a24a7d Mon Sep 17 00:00:00 2001 From: Yuelin Wang Date: Wed, 14 Oct 2026 10:28:35 +0200 Subject: [PATCH] feat: Sivas-Merkmale 4427-4432 (AS-/ES-Element) im Export befuellen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Streckenbloecke GF_N und VF_N tragen Winkel und Seite ihres AS-/ES- Elements bereits als Attribute des gemeinsamen Schemas (WINKEL_AS/SEITE_AS/ WINKEL_ES/SEITE_ES, *strecke-attr-front* in ssg_core.lsp). Diese Information landet jetzt auch im details-JSON des Sivas-Exports. Zuordnung (Sivas-Hierarchie: 4431/4432 schalten Winkel und Seite frei): 4431/4432 AS-/ES-Element vorhanden Ja/Nein 4427/4429 Winkel "30 °"/"90 °" 4428/4430 Seite links/rechts Die Zuordnung steht vollstaendig in cfg/sivas.cfg - mit denselben sechs Zeilen in [gefaellestrecke] und [variofoerderer], jeweils direkt hinter 2950, was auch die Reihenfolge im details-JSON bestimmt. Ob ein Element vorhanden ist, entscheidet ausschliesslich WINKEL_AS/WINKEL_ES: das Schema laesst den Winkel leer, wenn keines gewaehlt wurde, waehrend SEITE_AS/SEITE_ES mit "rechts" immer einen Vorgabewert tragen. Ohne Element bleiben Winkel UND Seite leer, damit in Sivas keine Seite unter einem "Nein"-Knoten haengt. Weitere Punkte: - sivas_mapping: neuer Dekorator @braucht_attribs. Ein so markierter Transform wird als fn(wert, attribs) statt fn(wert) aufgerufen und sieht damit die uebrigen Attribute des Blocks - noetig, weil die Seite vom Winkel abhaengt. Ohne diese Klammer muessten bedingte Merkmale wieder als Python-Code aus der Config herauswandern. - Die Winkel-Schreibweise der Sivas-Auswahlliste ("30 °" mit Leerzeichen vor dem Gradzeichen) steht als Tabelle [as_es_winkel_anzeige] in sivas.cfg, Bauart wie [geruest_typ_anzeige] - weicht Sivas davon ab, ist das die einzige Stelle zum Nachziehen. - gefaellestrecke_signature beruecksichtigt AS/ES: zwei sonst baugleiche Gefaellestrecken mit AS links bzw. rechts bleiben getrennte Zeilen, sonst zeigte die gemeinsame Zeile nur die Seite des ersten Blocks. - Altbestand ohne diese Attribute meldet "Nein" statt abzubrechen. - Merkmalsstamm_in_Sivas.xlsx auf den aktuellen Sivas-Stand gebracht (enthaelt neben 4427-4432 auch 4002, 7010-7013 und Klartext-Korrekturen; 4339/4383 heissen jetzt eindeutig "... Gefaellestrecke"/"... Variofoerderer"). - 12 neue Tests in tests/test_export_sivas_as_es.py, ohne BricsCAD lauffaehig. Co-Authored-By: Claude Opus 5 --- cfg/Merkmalsstamm_in_Sivas.xlsx | Bin 66824 -> 67194 bytes cfg/sivas.cfg | 55 +++++++++- cfg/sivas_merkmal_zuordnung.md | 51 ++++++++- lib/export_sivas.py | 91 +++++++++++++++- lib/sivas_mapping.py | 30 ++++- tests/test_export_sivas_as_es.py | 181 +++++++++++++++++++++++++++++++ 6 files changed, 396 insertions(+), 12 deletions(-) create mode 100644 tests/test_export_sivas_as_es.py diff --git a/cfg/Merkmalsstamm_in_Sivas.xlsx b/cfg/Merkmalsstamm_in_Sivas.xlsx index ad4c3ba60b9326957db9d777ae3f74529d82bc28..0dd6ba7c69b28fbe881c8e5da018b5ebd690676d 100644 GIT binary patch literal 67194 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 z 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 Ggc$(&`B+K- literal 66824 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 diff --git a/cfg/sivas.cfg b/cfg/sivas.cfg index aa11925..dc1a0c2 100644 --- a/cfg/sivas.cfg +++ b/cfg/sivas.cfg @@ -28,19 +28,45 @@ # (TRANSFORMS-Dict), die den ermittelten Rohwert # (Attribut- oder Default-Wert) in die Sivas-Anzeige # umwandelt (z.B. "0"/"1" -> "Ja"/"Nein"). Bekannte Namen: -# ja_nein, geruest_typ_anzeige. Ein unbekannter Name +# ja_nein, geruest_typ_anzeige, mm_zu_m, as_es_vorhanden, +# as_es_winkel, as_seite, es_seite. Ein unbekannter Name # bricht NICHT ab, der Rohwert wird unveraendert # uebernommen (siehe sivas_mapping.anwenden). +# Soll ein Merkmal ohne eigenes Attribut nur per Transform +# entstehen, braucht die Zeile trotzdem den ":" vor dem +# "|" ("WINKEL_AS : | as_es_vorhanden") - sonst gilt der +# Transform-Name als Fallback-Attributname. +# Transforms, die mit @braucht_attribs markiert sind +# (as_seite/es_seite), sehen zusaetzlich alle uebrigen +# Attribute des Blocks - noetig, wenn ein Merkmal von +# einem ZWEITEN Attribut abhaengt (Seite nur, wenn der +# zugehoerige Winkel ueberhaupt ein Element ausweist). # # Abschnittsnamen entsprechen den bisherigen build_*_details-Funktionen in # export_sivas.py: [gefaellestrecke], [kreisel], [eckrad], [geruest]. Die -# geruest-typ-Anzeige-Tabelle (ASCII-Attributwert -> Sivas-Klartext mit -# Umlauten) UND SEPARATOR_BEARBEITUNG_ANZEIGE bleiben eigene, kleine -# Abschnitte weiter unten. +# Anzeige-Tabellen (ASCII-Attributwert -> Sivas-Klartext/Optionswert: +# [geruest_typ_anzeige], [as_es_winkel_anzeige]) UND +# SEPARATOR_BEARBEITUNG_ANZEIGE bleiben eigene, kleine Abschnitte weiter +# unten. +# +# [gefaellestrecke] und [variofoerderer] fuehren die AS-/ES-Merkmale +# (4427-4432) absichtlich DOPPELT: GF_N- und VF_N-Bloecke tragen dieselben +# Attribute des gemeinsamen Strecken-Schemas, und jeder Abschnitt soll fuer +# sich lesbar bleiben. Aenderungen dort bitte in beiden nachziehen (der Test +# tests/test_export_sivas_as_es.py::test_zuordnung_steht_in_der_config wacht +# darueber). # ============================================================ [gefaellestrecke] 2950= MONTAGEHOEHE_m : 0 +# AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in +# [variofoerderer]): 4431/4432 Ja/Nein schalten Winkel und Seite frei. +4431= WINKEL_AS : | as_es_vorhanden +4427= WINKEL_AS : | as_es_winkel +4428= SEITE_AS : | as_seite +4432= WINKEL_ES : | as_es_vorhanden +4429= WINKEL_ES : | as_es_winkel +4430= SEITE_ES : | es_seite 4384= : Gefällestrecke 4318= L_GF_m 4391= GF_WINKEL @@ -85,6 +111,14 @@ Farbe= FARBE # Die Gefaelle-/Vario-Segmentpaare (4312-4392, 4353/4354/4386) haengen an der # Listenlaenge von L_GF_m/L_VF_m und bleiben Code. 2950= MONTAGEHOEHE_m : 0 +# AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in +# [gefaellestrecke]): 4431/4432 Ja/Nein schalten Winkel und Seite frei. +4431= WINKEL_AS : | as_es_vorhanden +4427= WINKEL_AS : | as_es_winkel +4428= SEITE_AS : | as_seite +4432= WINKEL_ES : | as_es_vorhanden +4429= WINKEL_ES : | as_es_winkel +4430= SEITE_ES : | es_seite 4329= GF_Bogen_L_90 : 0 4330= GF_Bogen_L_60 : 0 4331= GF_Bogen_L_30 : 0 @@ -103,6 +137,19 @@ Farbe= FARBE 3992= GERUEST_EINZELMODUL : 0 | ja_nein 3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige +[as_es_winkel_anzeige] +# Attributwert WINKEL_AS/WINKEL_ES -> Optionswert der Sivas-Auswahlliste zu +# Merkmal 4427/4429. Im Merkmalstamm heissen die Optionen "30 °"/"90 °" (mit +# Leerzeichen vor dem Gradzeichen) - das Attribut in der Zeichnung bleibt die +# nackte Zahl. Gleiche Bauart wie [geruest_typ_anzeige]: steht ein Winkel +# hier NICHT drin, wird er unveraendert uebernommen. +# +# >>> Falls Sivas den Import mit "30 °" ablehnt, ist DIESE Tabelle die +# >>> einzige Stelle zum Nachziehen (z.B. auf "30°" ohne Leerzeichen oder +# >>> auf die nackte Zahl) - der Code bleibt unberuehrt. +30= 30 ° +90= 90 ° + [geruest_typ_anzeige] # ASCII-Attributwert (GERUEST_TYP) -> Sivas-Klartext mit Umlauten/Sonder- # zeichen (Attribute selbst bleiben ASCII, siehe CLAUDE.md-Konvention). diff --git a/cfg/sivas_merkmal_zuordnung.md b/cfg/sivas_merkmal_zuordnung.md index 700403a..5b5abda 100644 --- a/cfg/sivas_merkmal_zuordnung.md +++ b/cfg/sivas_merkmal_zuordnung.md @@ -8,7 +8,8 @@ der Wahrheit ist der Code in `lib/export_sivas.py` - diese Datei ist ein Backup/Nachschlagewerk, bei Aenderungen am Code bitte hier nachziehen. Stand: abgeglichen mit `lib/export_sivas.py` nach der Umstellung von -beschreibenden JSON-Keys auf reine Merkmalnummern (Sept. 2026). +beschreibenden JSON-Keys auf reine Merkmalnummern (Sept. 2026), ergaenzt um +die AS-/ES-Element-Merkmale 4427-4432 (Okt. 2026). ## ILS 2.0 Kreisel (SivasNr 6200, Dispogruppe 20) @@ -59,6 +60,7 @@ immer 1. Sivas kennt je Streckengruppe nur EIN Gefaelle-Segment-Paar | 4381 | Streckengruppe - Anzahl der Separatoren - Variofoerderer | `ANZAHL_SEPARATOR` | **voller Blockwert** (Aufteilung noch offen, siehe 4337) | | 4382 | (dieselbe Bezeichnung wie 4338 im Merkmalstamm) | - | fest `SEPARATOR_BEARBEITUNG_ANZEIGE` | | 4383 | Streckengruppe - Anzahl der Scanner (Vario-Anteil) | `ANZAHL_SCANNER` | **voller Blockwert** | +| 4427-4432 | AS-/ES-Element (vorhanden/Winkel/Seite) | `WINKEL_AS`/`SEITE_AS`/`WINKEL_ES`/`SEITE_ES` | siehe eigener Abschnitt unten | | 3992 | Geruest fuer Einzelmodul | `GERUEST_EINZELMODUL` | wie Kreisel | | 3993 | Geruestoption fuer Einzelmodul | `GERUEST_TYP` | wie Kreisel | @@ -86,9 +88,56 @@ Stueckzahl der Gruppe steht im Merkmal 4311. | 4337 | Streckengruppe - Anzahl der Separatoren - Gefaellestrecke | `ANZAHL_SEPARATOR` | direkt (kein Split noetig, kein Vario-Anteil vorhanden) | | 4338 | Streckengruppe - Bearbeitung Gefaellestreckenteilstueck fuer Separator (829516050) | - | fest `SEPARATOR_BEARBEITUNG_ANZEIGE` | | 4339 | Streckengruppe - Anzahl der Scanner | `ANZAHL_SCANNER` | direkt | +| 4427-4432 | AS-/ES-Element (vorhanden/Winkel/Seite) | `WINKEL_AS`/`SEITE_AS`/`WINKEL_ES`/`SEITE_ES` | siehe eigener Abschnitt unten | | 3992 | Geruest fuer Einzelmodul | `GERUEST_EINZELMODUL` | wie Kreisel | | 3993 | Geruestoption fuer Einzelmodul | `GERUEST_TYP` | wie Kreisel | +Die Gruppierung (`gefaellestrecke_signature`) beruecksichtigt AS-/ES-Element +mit: zwei sonst baugleiche Gefaellestrecken mit AS links bzw. AS rechts +bleiben getrennte Zeilen, sonst zeigte die gemeinsame Zeile nur die Seite des +ersten Blocks. + +## AS-/ES-Element (4427-4432) - gilt fuer VF_N UND GF_N + +Die Zuordnung steht vollstaendig in `cfg/sivas.cfg` - mit denselben sechs +Zeilen in `[gefaellestrecke]` UND `[variofoerderer]`, weil beide Blockarten +dieselben Attribute des gemeinsamen Strecken-Schemas tragen +(`*strecke-attr-front*` in `ssg_core.lsp`). In `export_sivas.py` stehen nur +die Transform-Funktionen. + +Sivas-Hierarchie (Merkmalstamm): 4431/4432 (`"Ja"`/`"Nein"`) sind die +Oberknoten, Winkel und Seite haengen als Unterknoten darunter - darum auch +diese Reihenfolge in der Config. + +| Merkmalnr | Bezeichnung (Merkmalstamm) | Block-Attribut | Transform | Berechnung | +|---|---|---|---|---| +| 4431 | AS-Element | `WINKEL_AS` | `as_es_vorhanden` | `"Ja"`, wenn ein Winkel gesetzt ist, sonst `"Nein"` | +| 4427 | AS-Element - Winkel | `WINKEL_AS` | `as_es_winkel` | Optionswert der Auswahlliste (`"30"` -> `"30 °"`, Tabelle `[as_es_winkel_anzeige]`); leer, wenn kein AS-Element | +| 4428 | AS-Element - Seite | `SEITE_AS` | `as_seite` | kleingeschrieben (`"links"`/`"rechts"`); leer, wenn kein AS-Element | +| 4432 | ES-Element | `WINKEL_ES` | `as_es_vorhanden` | wie 4431 | +| 4429 | ES-Element - Winkel | `WINKEL_ES` | `as_es_winkel` | wie 4427 | +| 4430 | ES-Element - Seite | `SEITE_ES` | `es_seite` | wie 4428 | + +**Warum der Winkel ueber das Vorhandensein entscheidet und nicht die Seite:** +das Schema laesst `WINKEL_AS`/`WINKEL_ES` leer, wenn kein Element gewaehlt +wurde, waehrend `SEITE_AS`/`SEITE_ES` mit `"rechts"` immer einen Vorgabewert +tragen. Ohne Element bleiben darum Winkel UND Seite leer - sonst stuende in +Sivas eine Seite unter einem `"Nein"`-Knoten. + +**Winkel-Schreibweise:** die Sivas-Auswahlliste fuehrt `"30 °"`/`"90 °"` (mit +Leerzeichen vor dem Gradzeichen), das Block-Attribut dagegen die nackte Zahl. +Die Uebersetzung steht als Tabelle `[as_es_winkel_anzeige]` in `sivas.cfg` +(gleiche Bauart wie `[geruest_typ_anzeige]`) - weicht Sivas davon ab, ist das +die einzige Stelle zum Nachziehen. Ein Winkel ohne Eintrag dort wird +unveraendert uebernommen. + +**Neu im Mapping-Mechanismus:** `4428`/`4430` brauchen ein ZWEITES Attribut +(die Seite haengt am Winkel). Dafuer gibt es in `sivas_mapping.py` den +Dekorator `@braucht_attribs` - ein so markierter Transform wird als +`fn(wert, attribs)` statt `fn(wert)` aufgerufen und sieht damit die uebrigen +Attribute des Blocks. Ohne diese Klammer muessten bedingte Merkmale wieder +als Python-Code aus der Config herauswandern. + ## ILS 2.0 Zusatzmodul (SivasNr 6215, Dispogruppe 20) BTMT-Beladestationen UND Abwurfstationen (Klammerbuegel-Entladung) in EINER diff --git a/lib/export_sivas.py b/lib/export_sivas.py index 0a7c277..26cdd36 100644 --- a/lib/export_sivas.py +++ b/lib/export_sivas.py @@ -120,14 +120,94 @@ def mm_zu_m(wert_mm): return str(round(safe_float(wert_mm, 0.0) / 1000.0, 3)) +# --- AS-/ES-Element (Merkmale 4427-4432) --------------------------------- +# Zuordnung komplett in cfg/sivas.cfg ([gefaellestrecke]/[variofoerderer]), +# hier stehen nur die Transforms. Die Sivas-Hierarchie ist: 4431/4432 +# ("AS-Element"/"ES-Element", Ja/Nein) schalten die Unterknoten Winkel +# (4427/4429) und Seite (4428/4430) frei. +# +# Ob ein Element vorhanden ist, entscheidet AUSSCHLIESSLICH WINKEL_AS/ +# WINKEL_ES: das gemeinsame Strecken-Schema (*strecke-attr-front* in +# ssg_core.lsp) laesst den Winkel leer, wenn kein Element gewaehlt wurde. +# SEITE_AS/SEITE_ES taugen dafuer NICHT - sie tragen mit "rechts" immer einen +# Schema-Vorgabewert. Ohne Element bleiben Winkel UND Seite leer, damit in +# Sivas keine Seite unter einem "Nein"-Knoten haengt. + +# Attributwert -> Sivas-Optionswert der Auswahlliste ("30"/"90" -> "30 °"/ +# "90 °", siehe Merkmalstamm). Wie [geruest_typ_anzeige] in der Config, damit +# die exakte Schreibweise ohne Code-Aenderung nachgezogen werden kann. +AS_ES_WINKEL_ANZEIGE = sivas_mapping.load_flat_mapping("as_es_winkel_anzeige") + + +def winkel_text(wert): + """Elementwinkel ganzzahlig normiert ("90.0" -> "90"), ohne Sivas- + Anzeigeform. Basis fuer as_es_winkel UND fuer die Gruppierung (dort darf + die Anzeigeform keine Rolle spielen). Leerer Wert bleibt leer.""" + wert = str(wert or "").strip() + if not wert: + return "" + zahl = safe_float(wert, None) + return wert if zahl is None else str(int(zahl)) + + +def as_es_vorhanden(winkel): + """Merkmal 4431/4432: "Ja", sobald ein Elementwinkel gesetzt ist.""" + return "Ja" if winkel_text(winkel) else "Nein" + + +def as_es_winkel(winkel): + """Merkmal 4427/4429: Elementwinkel in der Sivas-Schreibweise der + Auswahlliste (cfg/sivas.cfg [as_es_winkel_anzeige]). Ein Winkel ohne + Eintrag dort wird unveraendert (nur ganzzahlig normiert) uebernommen.""" + winkel = winkel_text(winkel) + return AS_ES_WINKEL_ANZEIGE.get(winkel, winkel) + + +def _seite_text(seite, winkel): + """Gemeinsamer Kern von as_seite/es_seite: Seite nur, wenn es das Element + ueberhaupt gibt.""" + if not winkel_text(winkel): + return "" + return str(seite or "").strip().lower() + + +@sivas_mapping.braucht_attribs +def as_seite(wert, attribs): + """Merkmal 4428: AS-Seite, aber nur bei vorhandenem AS-Element.""" + return _seite_text(wert, attribs.get("WINKEL_AS", "")) + + +@sivas_mapping.braucht_attribs +def es_seite(wert, attribs): + """Merkmal 4430: ES-Seite, aber nur bei vorhandenem ES-Element.""" + return _seite_text(wert, attribs.get("WINKEL_ES", "")) + + # --- Transform-Namen, wie sie in cfg/sivas.cfg hinter "|" stehen koennen --- TRANSFORMS = { "ja_nein": ja_nein, "geruest_typ_anzeige": geruest_typ_anzeige, "mm_zu_m": mm_zu_m, + "as_es_vorhanden": as_es_vorhanden, + "as_es_winkel": as_es_winkel, + "as_seite": as_seite, + "es_seite": es_seite, } +def as_es_signatur(attribs): + """AS-/ES-Anteil des Gruppierungsschluessels (siehe + gefaellestrecke_signature). Nutzt dieselben Transforms wie der Export, + damit Schluessel und Zeileninhalt nicht auseinanderlaufen: ohne Element + ist die Seite leer und darf dann auch nicht trennen.""" + return (as_es_vorhanden(attribs.get("WINKEL_AS", "")), + winkel_text(attribs.get("WINKEL_AS", "")), + as_seite(attribs.get("SEITE_AS", ""), attribs), + as_es_vorhanden(attribs.get("WINKEL_ES", "")), + winkel_text(attribs.get("WINKEL_ES", "")), + es_seite(attribs.get("SEITE_ES", ""), attribs)) + + def streckengruppe_objekt_text(attribs): """Merkmal 4300 "Streckengruppe": "mehrere Objekte", wenn der Block ein kombinierter Streckengruppe-Block (Gefaelle+Vario, TYP-Attribut @@ -195,8 +275,14 @@ def gefaellestrecke_signature(block): """ Schluessel zur Gruppierung gleichartiger Gefaellestrecken: Bloecke mit identischen Massen (Hoehe, Laenge, Winkel, Separatoren, Scanner, Typ, - Geruest fuer Einzelmodul/Geruestoption) landen in derselben Sivas-Zeile - - nur IDs/Bezeichnung unterscheiden sich. + Geruest fuer Einzelmodul/Geruestoption, AS-/ES-Element) landen in + derselben Sivas-Zeile - nur IDs/Bezeichnung unterscheiden sich. + + AS-/ES-Element (Merkmale 4427-4432) gehoeren mit in den Schluessel: die + Merkmale der Zeile entstehen aus dem ERSTEN Block der Gruppe, zwei sonst + baugleiche Gefaellestrecken mit AS links bzw. AS rechts wuerden sonst zu + einer Zeile mit nur einer der beiden Seiten verschmelzen (siehe + as_es_signatur). """ attribs = block.get("attribs", {}) return ( @@ -209,6 +295,7 @@ def gefaellestrecke_signature(block): attribs.get("TYP", "Gefaellestrecke"), attribs.get("GERUEST_EINZELMODUL", "0"), attribs.get("GERUEST_TYP", "Schoenenberger Geruest"), + as_es_signatur(attribs), ) diff --git a/lib/sivas_mapping.py b/lib/sivas_mapping.py index d1480be..4948d49 100644 --- a/lib/sivas_mapping.py +++ b/lib/sivas_mapping.py @@ -97,14 +97,31 @@ def load_flat_mapping(section, cfg_path=None): return {} +def braucht_attribs(fn): + """Markiert einen Transform, der NEBEN seinem Rohwert auch das komplette + Attribut-Dict des Blocks braucht - er wird dann als fn(wert, attribs) + aufgerufen statt als fn(wert). + + Noetig fuer Merkmale, deren Wert von einem ZWEITEN Attribut abhaengt: die + AS-/ES-Seite (4428/4430) darf nur gefuellt werden, wenn der zugehoerige + WINKEL_AS/WINKEL_ES ueberhaupt ein Element ausweist. Ohne diese Klammer + muessten solche Merkmale wieder aus der Config heraus in Python-Code + wandern - genau das soll sivas.cfg vermeiden. + """ + fn.braucht_attribs = True + return fn + + def anwenden(section_mapping, attribs, transforms): """Wendet eine per load_section_mapping() gelesene Zuordnung auf ein Block-Attribut-Dict an. - transforms: dict transform_name -> Funktion(wert) -> wert. Ein in der - Config genannter, aber hier unbekannter Transform-Name wird ignoriert - (Rohwert bleibt unveraendert) statt abzubrechen - ein Tippfehler in - sivas.cfg darf den Export nicht zum Stillstand bringen. + transforms: dict transform_name -> Funktion(wert) -> wert. Ein mit + @braucht_attribs markierter Transform wird stattdessen als + fn(wert, attribs) aufgerufen und sieht damit die uebrigen Attribute des + Blocks. Ein in der Config genannter, aber hier unbekannter Transform-Name + wird ignoriert (Rohwert bleibt unveraendert) statt abzubrechen - ein + Tippfehler in sivas.cfg darf den Export nicht zum Stillstand bringen. Rueckgabe: dict merkmal -> wert. Ohne Transform wird der Rohwert zu str() gewandelt (bisheriges Verhalten der build_*_details-Funktionen: alles @@ -124,7 +141,10 @@ def anwenden(section_mapping, attribs, transforms): if transform: fn = transforms.get(transform) if fn is not None: - ergebnis[merkmal] = fn(wert) + if getattr(fn, "braucht_attribs", False): + ergebnis[merkmal] = fn(wert, attribs) + else: + ergebnis[merkmal] = fn(wert) continue ergebnis[merkmal] = str(wert) return ergebnis diff --git a/tests/test_export_sivas_as_es.py b/tests/test_export_sivas_as_es.py new file mode 100644 index 0000000..1e83e5f --- /dev/null +++ b/tests/test_export_sivas_as_es.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +test_export_sivas_as_es.py - Sivas-Merkmale 4427-4432 (AS-/ES-Element) fuer +Gefaellestrecke (GF_N) und Streckengruppe (VF_N). + +Pruefpunkte: Vorhandensein haengt am Winkel (nicht an der Seite, die immer +einen Vorgabewert traegt), der Winkel wird in die Sivas-Schreibweise der +Auswahlliste uebersetzt, ohne Element bleiben Winkel UND Seite leer, die +Zuordnung steht vollstaendig in cfg/sivas.cfg, und die GF-Gruppierung trennt +Bloecke mit unterschiedlichem AS-/ES-Element. + +Laeuft komplett ohne BricsCAD (reine Python-Logik). +""" + +import os +import sys + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib")) + +import export_sivas # noqa: E402 +import sivas_mapping # noqa: E402 + +# Sivas-Schreibweise der Winkel-Auswahlliste (cfg/sivas.cfg +# [as_es_winkel_anzeige]) - die Tests vergleichen gegen die Config, damit ein +# Nachziehen der Schreibweise dort nicht die halbe Testdatei bricht. +W30 = export_sivas.as_es_winkel("30") +W90 = export_sivas.as_es_winkel("90") + + +def _strecke(nr, typ="Gefaellestrecke", **attr): + """GF_N-/VF_N-Block mit dem gemeinsamen Strecken-Attributschema.""" + attribs = {"ID": f"000{nr}", "Bezeichnung": f"GF_{nr}", "ARTINR": "6220", + "MONTAGEHOEHE_m": "2.000", "HOEHE_VON_mm": "2000", + "HOEHE_BIS_mm": "1000", "TYP": typ, + "L_GF_m": "3.000", "GF_WINKEL": "3", + "SEITE_AS": "links", "WINKEL_AS": "90", + "SEITE_ES": "links", "WINKEL_ES": "90"} + attribs.update(attr) + return {"block_name": f"GF_{nr}", "x": 0.0, "y": 0.0, "z": 2000.0, + "rotation": 0.0, "attribs": attribs} + + +def test_as_es_vorhanden_mit_winkel_und_seite(): + details = export_sivas.build_gefaellestrecke_details(_strecke(1)) + assert details["4431"] == "Ja" + assert details["4427"] == W90 + assert details["4428"] == "links" + assert details["4432"] == "Ja" + assert details["4429"] == W90 + assert details["4430"] == "links" + + +def test_zuordnung_steht_in_der_config(): + """Die sechs Merkmale muessen in BEIDEN Strecken-Abschnitten von + sivas.cfg stehen (GF_N und VF_N lesen dieselben Attribute).""" + for abschnitt in ("gefaellestrecke", "variofoerderer"): + mapping = sivas_mapping.load_section_mapping(abschnitt) + for merkmal, attribut, transform in ( + ("4431", "WINKEL_AS", "as_es_vorhanden"), + ("4427", "WINKEL_AS", "as_es_winkel"), + ("4428", "SEITE_AS", "as_seite"), + ("4432", "WINKEL_ES", "as_es_vorhanden"), + ("4429", "WINKEL_ES", "as_es_winkel"), + ("4430", "SEITE_ES", "es_seite")): + assert merkmal in mapping, f"{merkmal} fehlt in [{abschnitt}]" + ist_attribut, _alt, _default, ist_transform = mapping[merkmal] + assert ist_attribut == attribut, f"[{abschnitt}] {merkmal}" + assert ist_transform == transform, f"[{abschnitt}] {merkmal}" + assert ist_transform in export_sivas.TRANSFORMS + + +def test_winkel_in_sivas_schreibweise(): + """4427/4429 tragen den Optionswert der Auswahlliste, nicht die nackte + Attributzahl (Vorgabe aus cfg/sivas.cfg [as_es_winkel_anzeige]).""" + details = export_sivas.build_gefaellestrecke_details( + _strecke(1, WINKEL_AS="30", WINKEL_ES="90.0")) + assert details["4427"] == W30 + assert details["4429"] == W90 + # Unbekannter Winkel faellt auf die ganzzahlige Rohzahl zurueck + assert export_sivas.as_es_winkel("60.0") in (W30, W90, "60") + + +def test_ohne_winkel_kein_element_und_keine_seite(): + """Leerer WINKEL_AS = kein AS-Element; die Seite darf dann NICHT + durchgereicht werden (SEITE_AS traegt mit "rechts" immer einen + Schema-Vorgabewert).""" + details = export_sivas.build_gefaellestrecke_details( + _strecke(1, WINKEL_AS="", SEITE_AS="rechts")) + assert details["4431"] == "Nein" + assert details["4427"] == "" + assert details["4428"] == "" + # ES bleibt davon unberuehrt + assert details["4432"] == "Ja" + assert details["4430"] == "links" + + +def test_seite_rechts(): + details = export_sivas.build_gefaellestrecke_details( + _strecke(1, SEITE_AS="rechts", SEITE_ES="rechts")) + assert details["4428"] == "rechts" + assert details["4430"] == "rechts" + + +def test_variofoerderer_hat_dieselben_merkmale(): + block = _strecke(1, typ="Streckengruppe", L_VF_m="2.000", VF_WINKEL="0", + ANTRIEBFAHRTRICHTUNG="Auf", MOTORSEITE="rechts", + WINKEL_AS="30", SEITE_AS="rechts") + details = export_sivas.build_variofoerderer_details(block) + assert details["4431"] == "Ja" + assert details["4427"] == W30 + assert details["4428"] == "rechts" + assert details["4429"] == W90 + + +def test_gruppierung_trennt_nach_as_seite(): + """Sonst baugleiche Gefaellestrecken mit AS links bzw. rechts duerfen + nicht in einer Sivas-Zeile landen (die Zeile wuerde nur eine der beiden + Seiten zeigen).""" + links = export_sivas.gefaellestrecke_signature(_strecke(1, SEITE_AS="links")) + rechts = export_sivas.gefaellestrecke_signature(_strecke(2, SEITE_AS="rechts")) + assert links != rechts + assert links == export_sivas.gefaellestrecke_signature(_strecke(3, SEITE_AS="links")) + + +def test_gruppierung_trennt_nach_as_winkel(): + assert (export_sivas.gefaellestrecke_signature(_strecke(1, WINKEL_AS="30")) + != export_sivas.gefaellestrecke_signature(_strecke(2, WINKEL_AS="90"))) + + +def test_gruppierung_ohne_element_ignoriert_die_seite(): + """Ohne AS-Element ist die Seite bedeutungslos und steht auch nicht in der + Zeile - sie darf die Gruppierung dann nicht aufspalten.""" + assert (export_sivas.gefaellestrecke_signature( + _strecke(1, WINKEL_AS="", SEITE_AS="links")) + == export_sivas.gefaellestrecke_signature( + _strecke(2, WINKEL_AS="", SEITE_AS="rechts"))) + + +def test_reihenfolge_im_details_json(): + """Die sechs Merkmale stehen im details-JSON direkt HINTER 2950 + (Anlagenhoehe) - so vorgegeben, und so steht es in beiden Abschnitten von + sivas.cfg. Die Reihenfolge der JSON-Keys folgt der Zeilenreihenfolge der + Config (configparser und dict erhalten beide die Einfuegereihenfolge).""" + erwartet = ["2950", "4431", "4427", "4428", "4432", "4429", "4430"] + gf = list(export_sivas.build_gefaellestrecke_details(_strecke(1))) + vf = list(export_sivas.build_variofoerderer_details( + _strecke(2, typ="Streckengruppe", L_VF_m="2.000"))) + assert gf[:len(erwartet)] == erwartet + assert vf[:len(erwartet)] == erwartet + + +def test_altbestand_ohne_die_attribute(): + """Bloecke aus Zeichnungen, die vor der Einfuehrung von WINKEL_AS gebaut + wurden, haben die Attribute gar nicht - dann greift der leere Default und + es wird "Nein" gemeldet (statt KeyError). Das ist die einzig moegliche + Aussage: Sivas kennt nur Ja/Nein, kein "unbekannt".""" + block = _strecke(1) + for tag in ("WINKEL_AS", "SEITE_AS", "WINKEL_ES", "SEITE_ES"): + del block["attribs"][tag] + details = export_sivas.build_gefaellestrecke_details(block) + assert details["4431"] == "Nein" + assert details["4432"] == "Nein" + assert details["4427"] == details["4428"] == "" + assert details["4429"] == details["4430"] == "" + + +def test_transform_mit_attribs_kontext(): + """Der @braucht_attribs-Transform muss das komplette Attribut-Dict sehen - + sonst koennte die Seite ihre Abhaengigkeit vom Winkel nicht pruefen.""" + assert getattr(export_sivas.as_seite, "braucht_attribs", False) + assert getattr(export_sivas.es_seite, "braucht_attribs", False) + assert not getattr(export_sivas.ja_nein, "braucht_attribs", False) + + mapping = {"4428": ("SEITE_AS", None, "", "as_seite")} + attribs = {"SEITE_AS": "links", "WINKEL_AS": "90"} + assert sivas_mapping.anwenden(mapping, attribs, export_sivas.TRANSFORMS) \ + == {"4428": "links"} + attribs_ohne = {"SEITE_AS": "links", "WINKEL_AS": ""} + assert sivas_mapping.anwenden(mapping, attribs_ohne, export_sivas.TRANSFORMS) \ + == {"4428": ""}