from pydantic import BaseModel, Field, field_validator class Angetriebene_Kurve(BaseModel): teileid: str x: float y:float drehung: float = Field(default=0.0,description="Rotation der Kurve") hoehe0: float = Field(default=0.0,description="Hoehe Anfang der Kurve") hoehe1: float = Field(default=0.0,description="Hoehe Ende der Kurve") kurvenrichtung: str = Field(description="Kurvenrichtung der Kurve") antriebNebenStrecke: str =Field(description="wo die Angetriebene Strecke ist abhängig von der kurvenrichtung") winkel: int = Field(description="Der Winkel der Kurve") @property def antrieb(self): if self.antriebNebenStrecke == "Aussen": self.antriebNebenStrecke = "außen" elif self.antriebNebenStrecke == "Innen": self.antriebNebenStrecke = "innen" return self.antriebNebenStrecke @property def hight_zwischen(self): return ((self.hoehe0 + self.hoehe1) /2) @classmethod def from_merkmale(cls, teileid: str, x: float, y: float, merkmale: dict) -> 'Angetriebene_Kurve': hoehe0 = float(merkmale.get("Höhe Anfang")) * 1000 hoehe1 = float(merkmale.get("Höhe Ende")) * 1000 winkel = int(merkmale.get("Kurvenwinkel")) kurvenrichtung = merkmale.get("Kurvenrichtung") antriebNebenstrecke = merkmale.get("AntriebNebenStrecke") try: drehung = float(merkmale.get("Drehung")) except Exception as e: drehung = 0.0 return cls( teileid = teileid, x = x, y = y, drehung = drehung, hoehe0 = hoehe0, hoehe1 = hoehe1, kurvenrichtung = kurvenrichtung, antriebNebenStrecke = antriebNebenstrecke, winkel = winkel )