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] @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()