from dataclasses import dataclass, asdict from typing import List, Dict, Any, TYPE_CHECKING, Optional from models.geo_json.feature import GeoJSONFeature if TYPE_CHECKING: from models.circuit import Circuit @dataclass class GeoJSON: type: str bbox: Optional[list[float]] features: List[GeoJSONFeature] @classmethod def from_dict(cls, circuit: 'Circuit', data: Dict[str, Any]) -> 'GeoJSON': return cls( type=data['type'], bbox=data['bbox'] if 'bbox' in data else None, features=[GeoJSONFeature.from_dict(circuit, f) for f in data['features']], ) def to_dict(self) -> Dict[str, Any]: """Convert the GeoJSON object back to a dictionary""" data = asdict(self) # Remove None values return {k: v for k, v in data.items() if v is not None}