Dataclass models have parent back-references (TrackLayout→Circuit→ Locality→Country) causing infinite recursion in dataclasses.asdict(). Add to_dict() methods that exclude parent refs, use them in API endpoints.
38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING
|
|
from .circuit import Circuit
|
|
|
|
if TYPE_CHECKING:
|
|
from .country import Country
|
|
|
|
@dataclass
|
|
class Locality:
|
|
slug: str
|
|
name: str
|
|
country: 'Country'
|
|
circuits: dict[str, Circuit]
|
|
|
|
def to_dict(self) -> dict:
|
|
return {
|
|
"slug": self.slug,
|
|
"name": self.name,
|
|
"circuits": {k: v.to_dict() for k, v in self.circuits.items()},
|
|
}
|
|
|
|
@classmethod
|
|
def from_dict(cls, country: 'Country', slug: str, data: dict):
|
|
locality = cls(
|
|
slug=slug,
|
|
name=data["name"],
|
|
country=country,
|
|
circuits={}
|
|
)
|
|
locality.circuits = {circuit_slug: Circuit.from_dict(locality, circuit_slug, circuit_data) for
|
|
circuit_slug, circuit_data in data["circuits"].items()}
|
|
return locality
|
|
|
|
def load_geo_json_data(self):
|
|
"""Load data for all circuits"""
|
|
for circuit in self.circuits.values():
|
|
circuit.load_geo_json_data()
|