Files
f1-circuits/models/circuit.py
T
jschoubben 83311a6079 Fix circular reference recursion in JSON serialization
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.
2026-05-08 03:01:42 +02:00

47 lines
1.3 KiB
Python

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