L'erreur de validation dans Forge¶
Ce document explique l'exception centrale de validation des entités, son rôle dans le cœur du framework, et comment la lire dans le code applicatif.
Le fichier de code correspondant est core/validation/exceptions.py.
1. Rôle¶
PropertyValidationError est l'exception unique levée quand une contrainte de propriété n'est pas respectée.
Elle porte deux informations : le nom de la propriété fautive et un message décrivant la raison du refus.
Ainsi, le code qui attrape l'erreur sait exactement quelle propriété a posé problème et peut afficher le bon message au bon endroit.
PropertyValidationError hérite de ValueError.
Un code qui attrape déjà ValueError capture donc aussi les erreurs de validation Forge.
from core.validation import PropertyValidationError
try:
article.title = ""
except PropertyValidationError as error:
print(error.property_name) # "title"
print(error.message) # la raison du refus
2. Vue d'ensemble rapide¶
| Élément | Valeur |
|---|---|
| Classe | PropertyValidationError |
| Module | core.validation.exceptions |
| Couche | Validation du cœur |
| Hérite de | ValueError |
| Rôle | signaler une propriété qui ne respecte pas sa contrainte |
| Levée par | les décorateurs de core.validation.decorators |
| Exposée par | core.validation |
| Attributs | property_name, message |
3. Schémas UML¶
3.1 Diagramme de classe¶
Le diagramme montre la place de PropertyValidationError dans la hiérarchie des exceptions et son lien avec les décorateurs qui la lèvent.
Il permet de voir que PropertyValidationError est une ValueError enrichie de deux attributs nommés, levée par les décorateurs de validation.
classDiagram
direction LR
class ValueError {
<<exception>>
}
class PropertyValidationError {
<<exception>>
+str property_name
+str message
}
class Decorateur {
+typed(...)
+not_empty(...)
+pattern(...)
}
ValueError <|-- PropertyValidationError
Decorateur ..> PropertyValidationError : leve
À retenir :
PropertyValidationErrorhérite deValueError;- elle porte
property_nameetmessage; - elle est levée par les décorateurs de validation ;
- un code qui attrape
ValueErrorattrape aussiPropertyValidationError.
4. API publique¶
| Élément | Signature | Rôle |
|---|---|---|
PropertyValidationError |
PropertyValidationError(property_name: str, message: str) |
construit l'exception avec la propriété fautive et le message de refus |
property_name |
attribut str |
nom de la propriété en cause |
message |
attribut str |
raison lisible du refus |
Le message est aussi l'argument transmis à ValueError, donc str(error) renvoie ce même message.
5. Contextes d'utilisation¶
| Besoin | Élément |
|---|---|
| Identifier la propriété fautive | error.property_name |
| Afficher la raison du refus | error.message |
| Capturer une erreur de validation | except PropertyValidationError |
| Capturer largement les erreurs de valeur | except ValueError |
En pratique, les décorateurs de validation lèvent cette erreur lors d'une affectation de propriété.
Le code applicatif l'attrape, typiquement dans un contrôleur ou un service de formulaire, pour relier le message au bon champ.
6. Exemples d'utilisation¶
Attraper l'erreur et lire ses attributs
from core.validation import PropertyValidationError, typed, not_empty
class Article:
@property
def title(self) -> str:
return self._title
@title.setter
@typed(str)
@not_empty
def title(self, value: str) -> None:
self._title = value
article = Article()
try:
article.title = " "
except PropertyValidationError as error:
print(error.property_name) # "title"
print(error.message) # la propriété 'title' ne doit pas être vide.
Relier l'erreur à un champ de formulaire
from core.validation import PropertyValidationError
def soumettre(article, data) -> dict[str, str]:
erreurs: dict[str, str] = {}
try:
article.title = data.get("title")
except PropertyValidationError as error:
erreurs[error.property_name] = error.message
return erreurs
Le dictionnaire renvoyé associe chaque propriété fautive à son message, prêt à être affiché sur le bon champ.
Voir aussi¶
- Les décorateurs de validation dans Forge : les décorateurs qui lèvent
PropertyValidationError.