from dataclasses import dataclass from typing import Optional, Dict, Any, TYPE_CHECKING if TYPE_CHECKING: from models.circuit import Circuit @dataclass class GeoJSONProperties: id: str country: str locality: str circuit: str length: Optional[int] = None altitude: Optional[int] = None rotation: Optional[float] = None direction: Optional[str] = None fastest_laptime: Optional[float] = None @classmethod def from_dict(cls, circuit: 'Circuit', data: Dict[str, Any]) -> 'GeoJSONProperties': return cls( id=data.get("id"), country=circuit.locality.country.name, locality=circuit.locality.name, circuit=circuit.name, **{k: v for k, v in data.items() if k in cls.__annotations__ and k not in ['id', 'country', 'locality', 'circuit']} )