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.
This commit is contained in:
+5
-5
@@ -67,7 +67,7 @@ async def root():
|
||||
async def get_countries():
|
||||
"""Get list of all available countries with their slugs"""
|
||||
return {
|
||||
"countries": circuit_service.get_countries_list()
|
||||
"countries": [c.to_dict() for c in circuit_service.get_countries_list()]
|
||||
}
|
||||
|
||||
@app.get("/circuits/{country_slug}")
|
||||
@@ -76,7 +76,7 @@ async def get_cities(country_slug: str):
|
||||
cities = circuit_service.get_localities_list(country_slug)
|
||||
if not cities:
|
||||
raise HTTPException(status_code=404, detail="Country not found")
|
||||
return {"cities": cities}
|
||||
return {"cities": [c.to_dict() for c in cities]}
|
||||
|
||||
@app.get("/circuits/{country_slug}/{city_slug}")
|
||||
async def get_circuits(country_slug: str, city_slug: str):
|
||||
@@ -84,7 +84,7 @@ async def get_circuits(country_slug: str, city_slug: str):
|
||||
circuits = circuit_service.get_circuits_list(country_slug, city_slug)
|
||||
if not circuits:
|
||||
raise HTTPException(status_code=404, detail="City not found")
|
||||
return {"circuits": circuits}
|
||||
return {"circuits": [c.to_dict() for c in circuits]}
|
||||
|
||||
@app.get("/circuits/{country_slug}/{city_slug}/{circuit_slug}")
|
||||
async def get_circuit_details(country_slug: str, city_slug: str, circuit_slug: str):
|
||||
@@ -92,7 +92,7 @@ async def get_circuit_details(country_slug: str, city_slug: str, circuit_slug: s
|
||||
circuit_details = circuit_service.get_circuit_details(country_slug, city_slug, circuit_slug)
|
||||
if not circuit_details:
|
||||
raise HTTPException(status_code=404, detail="Circuit not found")
|
||||
return circuit_details
|
||||
return circuit_details.to_dict()
|
||||
|
||||
@app.get("/circuits/{country_slug}/{city_slug}/{circuit_slug}/layout/{layout_slug}")
|
||||
async def get_layout_details(country_slug: str, city_slug: str, circuit_slug: str, layout_slug: str):
|
||||
@@ -100,7 +100,7 @@ async def get_layout_details(country_slug: str, city_slug: str, circuit_slug: st
|
||||
layout_details = circuit_service.get_layout_details(country_slug, city_slug, circuit_slug, layout_slug)
|
||||
if not layout_details:
|
||||
raise HTTPException(status_code=404, detail="Layout not found")
|
||||
return layout_details
|
||||
return layout_details.to_dict()
|
||||
|
||||
@app.get("/tracks/{country_slug}/{city_slug}/{circuit_slug}/year/{year}/{image_format}")
|
||||
async def get_track_by_year(
|
||||
|
||||
Reference in New Issue
Block a user