F1 circuit layouts with year-by-year SVGs — manually traced track variations
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

47 Zeilen
1.3KB

  1. from dataclasses import dataclass
  2. from typing import TYPE_CHECKING
  3. from .track_layout import TrackLayout
  4. if TYPE_CHECKING:
  5. from .locality import Locality
  6. @dataclass
  7. class URLs:
  8. wikipedia: str
  9. fandom: str
  10. @dataclass
  11. class Circuit:
  12. slug: str
  13. name: str
  14. urls: URLs
  15. locality: 'Locality'
  16. layouts: dict[str, TrackLayout]
  17. def to_dict(self) -> dict:
  18. return {
  19. "slug": self.slug,
  20. "name": self.name,
  21. "urls": {"wikipedia": self.urls.wikipedia, "fandom": self.urls.fandom},
  22. "layouts": {k: v.to_dict() for k, v in self.layouts.items()},
  23. }
  24. @classmethod
  25. def from_dict(cls, locality: 'Locality', slug: str, data: dict) -> 'Circuit':
  26. circuit = cls(
  27. slug=slug,
  28. name=data["name"],
  29. urls=URLs(**data["urls"]),
  30. locality=locality,
  31. layouts={}
  32. )
  33. circuit.layouts = {layout_slug: TrackLayout.from_dict(circuit, layout_slug, layout_data) for
  34. layout_slug, layout_data in data["layouts"].items()}
  35. return circuit
  36. def load_geo_json_data(self):
  37. """Load data for all layouts"""
  38. for track_layout in self.layouts.values():
  39. track_layout.load_geo_json_data()