Fix Startabbruch: 204-Route in dashboard.py brach den Backend-Start ab
AssertionError beim Import: "Status code 204 must not have a response body". Ursache ist eine Wechselwirkung, die nur in dieser Datei auftritt: dashboard.py nutzt "from __future__ import annotations". Dadurch ist die Rueckgabeangabe "-> None" eine Zeichenkette, die FastAPI zu NoneType aufloest und als Antwortmodell wertet. Zusammen mit status_code=204 - das keinen Rumpf haben darf - schlaegt die Pruefung beim Registrieren der Route fehl und das Backend startet gar nicht. Andere Router im Projekt haben dieses __future__-Import nicht, deshalb funktioniert dasselbe Muster dort. Die Route folgt jetzt dem bereits bewaehrten Muster aus branding.py: Der Statuscode steht am Response, nicht im Dekorator. Der Grund steht als Kommentar an der Funktion, damit die Falle nicht erneut zuschnappt. Geprueft: Alle uebrigen Routen der Datei haben ein explizites response_model im Dekorator und sind davon nicht betroffen. Ein Start des Backends konnte ich hier nicht pruefen - auf diesem Rechner ist weder Python noch Docker vorhanden. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ from collections import defaultdict
|
|||||||
from datetime import date, datetime, timedelta, timezone
|
from datetime import date, datetime, timedelta, timezone
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException, status
|
from fastapi import APIRouter, Depends, HTTPException, status
|
||||||
|
from fastapi.responses import Response
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from ..database import get_db
|
from ..database import get_db
|
||||||
@@ -136,15 +137,22 @@ def put_layout(
|
|||||||
return get_layout(db=db, user=user)
|
return get_layout(db=db, user=user)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/layout", status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete("/layout")
|
||||||
def reset_layout(
|
def reset_layout(
|
||||||
db: Session = Depends(get_db), user: User = Depends(get_current_user)
|
db: Session = Depends(get_db), user: User = Depends(get_current_user)
|
||||||
) -> None:
|
) -> Response:
|
||||||
"""Eigene Anordnung verwerfen – danach gilt wieder die Vorgabe."""
|
"""Eigene Anordnung verwerfen – danach gilt wieder die Vorgabe.
|
||||||
|
|
||||||
|
Der Statuscode steht bewusst am Response und nicht im Dekorator: Durch
|
||||||
|
``from __future__ import annotations`` wird ``-> None`` zu einer Zeichenkette,
|
||||||
|
die FastAPI zu ``NoneType`` auflöst und als Antwortmodell wertet – zusammen
|
||||||
|
mit 204 (das keinen Rumpf haben darf) bricht der Start dann ab.
|
||||||
|
"""
|
||||||
row = db.query(DashboardLayout).filter(DashboardLayout.user_id == user.id).first()
|
row = db.query(DashboardLayout).filter(DashboardLayout.user_id == user.id).first()
|
||||||
if row is not None:
|
if row is not None:
|
||||||
db.delete(row)
|
db.delete(row)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
return Response(status_code=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
@router.put("/layout/default", response_model=DashboardLayoutOut)
|
@router.put("/layout/default", response_model=DashboardLayoutOut)
|
||||||
|
|||||||
Reference in New Issue
Block a user