Validation de données avec Pydantic en Python

Présentation de Pydantic

Pydantic est la bibliothèque Python dominante pour la validation de données. Elle vérifie la conformité des types de données lors de leur transmissoin. Par exemple, si un entier est attendu mais qu'une chaîne est fournie, Pydantic génère une erreur pour garantir l'intégrité des informations.

Avantages principaux

  • Typage statique : L'inférence de schémas via les annotations de type réduit la courbe d'apprentissage
  • Performances : Noyau de validation écrit en Rust pour une exécution optimisée
  • Interopérabilité : Génération automatique de schémas JSON pour l'intégration
  • Flexibilité : Modes strict (validation pure) et laxiste (conversion auotmatique)
  • Extensibilité : Validation personnalisable via des décorateurs dédiés

Choix de version

La version 2.x est recommandée pour les nouveuax projets depuis juin 2023, la v1.x n'étant plus maintenue depuis juin 2024.

Installation

pip install pydantic

Composants essentiels

BaseModel

Classe fondamentale pour définir des modèles de données avec validation intégrée :

from pydantic import BaseModel

class Produit(BaseModel):
    reference: int
    designation: str
    prix: float

article = Produit(reference=101, designation="Clavier", prix=49.99)
print(article.designation)  # Affiche: Clavier

try:
    Produit(reference="ABC", designation="Souris", prix=25.0)
except ValueError as erreur:
    print(erreur)  # Erreur de validation

ConfigDict

Contrôle le comportement des modèles via des paramètres de configuration :

from pydantic import BaseModel, ConfigDict

class Client(BaseModel):
    identifiant: int
    nom: str

    model_config = ConfigDict(extra="ignore")  # Ignore les champs supplémentaires

utilisateur = Client(identifiant=1, nom="Luc", age=30)  # Age ignoré silencieusement

Validateur personnalisé

Ajoute des règles de validation spécifiques avec le décorateur model_validator :

from pydantic import BaseModel, model_validator

class Commande(BaseModel):
    id_commande: int
    quantite: int

    @model_validator(mode="before")
    @classmethod
    def verifier_quantite(cls, valeurs):
        if valeurs["quantite"] <= 0:
            raise ValueError("Quantité invalide")
        return valeurs

try:
    Commande(id_commande=1001, quantite=-5)
except ValueError as e:
    print(e)  # Quantité invalide

Étiquettes: pydantic validation-données Python typage modèle-données

Publié le 22 juin à 23h20