Unittests zu allen Elementen erstellt
This commit is contained in:
@@ -1,8 +1,18 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Angetriebene_Kurve — Modell für angetriebene Kurven.
|
||||
|
||||
Refactoring-Änderungen:
|
||||
- antrieb-Property Side-Effect entfernt: Normalisierung "Aussen"→"außen" etc.
|
||||
wird nun beim Erstellen durch @field_validator erledigt
|
||||
- antrieb-Property ist jetzt ein reiner read-only Getter
|
||||
"""
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
|
||||
class Angetriebene_Kurve(BaseModel):
|
||||
"""Modell für eine angetriebene Kurve."""
|
||||
|
||||
teileid: str
|
||||
x: float
|
||||
y: float
|
||||
@@ -15,22 +25,47 @@ class Angetriebene_Kurve(BaseModel):
|
||||
)
|
||||
winkel: int = Field(description="Der Winkel der Kurve")
|
||||
|
||||
@field_validator("antriebNebenStrecke", mode="before")
|
||||
@classmethod
|
||||
def normalize_antrieb(cls, v):
|
||||
"""
|
||||
Normalisiert die Antrieb-Bezeichnung beim Erstellen.
|
||||
|
||||
Konvertiert englische/gemischte Schreibvarianten in
|
||||
die konsistente deutsche Kleinbuchstaben-Form.
|
||||
|
||||
"Aussen" → "außen", "Innen" → "innen"
|
||||
"""
|
||||
if isinstance(v, str):
|
||||
mapping = {"Aussen": "außen", "Innen": "innen"}
|
||||
return mapping.get(v, v)
|
||||
return v
|
||||
|
||||
@property
|
||||
def antrieb(self):
|
||||
if self.antriebNebenStrecke == "Aussen":
|
||||
self.antriebNebenStrecke = "außen"
|
||||
elif self.antriebNebenStrecke == "Innen":
|
||||
self.antriebNebenStrecke = "innen"
|
||||
def antrieb(self) -> str:
|
||||
"""Antrieb-Seite (read-only, normalisiert beim Erstellen)."""
|
||||
return self.antriebNebenStrecke
|
||||
|
||||
@property
|
||||
def hight_zwischen(self):
|
||||
"""Mittlere Höhe zwischen hoehe0 und hoehe1."""
|
||||
return (self.hoehe0 + self.hoehe1) / 2
|
||||
|
||||
@classmethod
|
||||
def from_merkmale(
|
||||
cls, teileid: str, x: float, y: float, merkmale: dict
|
||||
) -> "Angetriebene_Kurve":
|
||||
"""
|
||||
Erstellt Angetriebene_Kurve aus einem Merkmale-Dictionary.
|
||||
|
||||
Args:
|
||||
teileid: Teile-Identifikator
|
||||
x, y: Koordinaten in mm
|
||||
merkmale: Dictionary mit Eigenschaftswerten
|
||||
|
||||
Returns:
|
||||
Angetriebene_Kurve-Instanz
|
||||
"""
|
||||
hoehe0 = float(merkmale.get("Höhe Anfang")) * 1000
|
||||
hoehe1 = float(merkmale.get("Höhe Ende")) * 1000
|
||||
winkel = int(merkmale.get("Kurvenwinkel"))
|
||||
@@ -38,7 +73,7 @@ class Angetriebene_Kurve(BaseModel):
|
||||
antriebNebenstrecke = merkmale.get("AntriebNebenStrecke")
|
||||
try:
|
||||
drehung = float(merkmale.get("Drehung"))
|
||||
except Exception as e:
|
||||
except (TypeError, ValueError):
|
||||
drehung = 0.0
|
||||
|
||||
return cls(
|
||||
|
||||
Reference in New Issue
Block a user