Files
home_hub/backend/app/schemas/notes.py
T
gilles 53018c16dd fix(notes): erreur 500 sur les notes antérieures (urls=NULL)
Les notes créées avant la migration 0061 ont urls=NULL en base. Le défaut
NoteResponse.urls=[] ne s'applique qu'à un attribut absent, pas à None, d'où
ResponseValidationError "Input should be a valid list" → GET /api/notes 500
→ "Erreur de chargement" côté UI.

Ajoute un field_validator(mode='before') qui coerce None → [].
Nettoie aussi l'import HttpUrl inutilisé.

v0.5.16

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 10:15:15 +02:00

66 lines
1.6 KiB
Python

import uuid
from datetime import datetime
from pydantic import BaseModel, ConfigDict, field_validator
class NoteUrl(BaseModel):
label: str
url: str
@field_validator('url')
@classmethod
def validate_url(cls, v: str) -> str:
if not v.startswith(('http://', 'https://')):
raise ValueError('URL doit commencer par http:// ou https://')
return v
class AttachmentResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
file_path: str | None
thumbnail_path: str | None
file_type: str | None
original_name: str | None
created_at: datetime
class NoteCreate(BaseModel):
title: str | None = None
content: str
category: str | None = None
tags: list[str] = []
gps_lat: float | None = None
gps_lon: float | None = None
urls: list[NoteUrl] = []
class NoteUpdate(BaseModel):
title: str | None = None
content: str | None = None
category: str | None = None
tags: list[str] | None = None
gps_lat: float | None = None
gps_lon: float | None = None
urls: list[NoteUrl] | None = None
class NoteResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
title: str | None
content: str
category: str | None
tags: list[str]
gps_lat: float | None
gps_lon: float | None
urls: list[NoteUrl] = []
created_at: datetime
attachments: list[AttachmentResponse]
@field_validator('urls', mode='before')
@classmethod
def coerce_urls(cls, v: object) -> object:
# Les notes antérieures à la migration 0061 ont urls=NULL en base.
return v or []