from dataclasses import dataclass from typing import TYPE_CHECKING from .track_layout import TrackLayout if TYPE_CHECKING: from .locality import Locality @dataclass class URLs: wikipedia: str fandom: str @dataclass class Circuit: slug: str name: str urls: URLs locality: 'Locality' layouts: dict[str, TrackLayout] def to_dict(self) -> dict: return { "slug": self.slug, "name": self.name, "urls": {"wikipedia": self.urls.wikipedia, "fandom": self.urls.fandom}, "layouts": {k: v.to_dict() for k, v in self.layouts.items()}, } @classmethod def from_dict(cls, locality: 'Locality', slug: str, data: dict) -> 'Circuit': circuit = cls( slug=slug, name=data["name"], urls=URLs(**data["urls"]), locality=locality, layouts={} ) circuit.layouts = {layout_slug: TrackLayout.from_dict(circuit, layout_slug, layout_data) for layout_slug, layout_data in data["layouts"].items()} return circuit def load_geo_json_data(self): """Load data for all layouts""" for track_layout in self.layouts.values(): track_layout.load_geo_json_data()