Vue d'ensemble

Pydantic 1.8, publié le 28 mars 2021, introduit les encodeurs JSON personnalisés et renforce les types stricts pour une validation plus fine.

Fonctionnalités principales

Encodeurs JSON personnalisés

La configuration json_encoders permet de définir comment les types personnalisés sont sérialisés en JSON, évitant les erreurs de sérialisation pour les types non standard.

python
from datetime import datetime
from pydantic import BaseModel

class Evenement(BaseModel):
    nom: str
    date: datetime
    participants: set[str]

    class Config:
        json_encoders = {
            datetime: lambda v: v.strftime('%d/%m/%Y %H:%M'),
            set: list,
        }

evt = Evenement(nom='PyCon', date=datetime(2021, 5, 14), participants={'Alice', 'Bob'})
print(evt.json())  # {"nom": "PyCon", "date": "14/05/2021 00:00", ...}

Types stricts

Les types stricts comme StrictStr, StrictInt et StrictBool refusent les conversions implicites, garantissant que les données reçues sont exactement du type attendu.

python
from pydantic import BaseModel, StrictInt, StrictStr, ValidationError

class Config(BaseModel):
    port: StrictInt
    host: StrictStr

# OK : types exacts
c = Config(port=8080, host='localhost')

# Erreur : '8080' est une chaîne, pas un int
try:
    Config(port='8080', host='localhost')
except ValidationError as e:
    print(e)  # value is not a valid integer

Sources