Vue d'ensemble
Pydantic 1.9, publie le 31 decembre 2021, ajoute les unions discriminees pour une validation plus efficace des modeles polymorphes.
Fonctionnalites principales
Unions discriminees
Les unions discriminees utilisent un champ discriminateur pour identifier le type concret, evitant de tester chaque variante et ameliorant les performances de validation.
python
from typing import Literal, Union
from pydantic import BaseModel, Field
class Chat(BaseModel):
type: Literal['chat'] = 'chat'
miaule: bool = True
class Chien(BaseModel):
type: Literal['chien'] = 'chien'
aboie: bool = True
class Foyer(BaseModel):
animal: Union[Chat, Chien] = Field(discriminator='type')
# Validation rapide via le discriminateur
f1 = Foyer(animal={'type': 'chat', 'miaule': True})
f2 = Foyer(animal={'type': 'chien', 'aboie': False})
print(f1.animal) # type='chat' miaule=True
print(f2.animal) # type='chien' aboie=False
Ameliorations de validation
La validation est globalement plus rapide avec un meilleur support des types generiques et des validateurs personnalises enchaines.
python
from pydantic import BaseModel, validator
class Utilisateur(BaseModel):
nom: str
email: str
age: int
@validator('email')
def email_valide(cls, v):
if '@' not in v:
raise ValueError('Email invalide')
return v.lower()
@validator('age')
def age_positif(cls, v):
if v < 0:
raise ValueError('Age doit etre positif')
return v
u = Utilisateur(nom='Alice', email='Alice@Example.COM', age=30)
print(u.email) # alice@example.com
