Les statuts dans Forge Workflow¶
Ce document décrit comment forge_mvc_workflow modélise et valide les statuts d'une entité.
Le fichier de code correspondant est forge_mvc_workflow/status.py.
1. À quoi sert ce module ?¶
Un statut décrit l'état d'une entité applicative : draft, pending, published, archived…
Ce module fournit l'objet WorkflowStatus et les fonctions pour créer et valider un jeu de statuts cohérent.
Les statuts restent génériques : aucun métier n'est imposé, c'est l'application qui choisit ses états.
2. Déclarer des statuts¶
from forge_mvc_workflow import make_status, validate_statuses, find_status
STATUTS = validate_statuses([
make_status("draft", label="Brouillon", color="gray", is_initial=True),
make_status("pending", label="En attente", color="yellow"),
make_status("published", label="Publié", color="green", is_final=True),
make_status("archived", label="Archivé", color="gray", is_final=True),
])
find_status(STATUTS, "pending") # WorkflowStatus(name='pending', ...)
find_status(STATUTS, "unknown") # None
3. L'objet WorkflowStatus¶
@dataclass
class WorkflowStatus:
name: str # snake_case, obligatoire
label: str = "" # retombe sur name si vide
color: str = "" # libre, ex. "yellow", "#f59e0b"
is_initial: bool = False
is_final: bool = False
Le constructeur valide et normalise name automatiquement ; un nom vide ou contenant des caractères interdits lève WorkflowStatusError.
4. Les fonctions¶
| Fonction | Comportement |
|---|---|
make_status(name, ...) |
crée un WorkflowStatus validé (raccourci du constructeur) |
validate_statuses(statuses) |
vérifie doublons et unicité du statut initial ; retourne la liste |
find_status(statuses, name) |
retourne le statut correspondant, ou None |
normalize_status_name(value) |
minuscule, espaces et tirets vers _ ; lève si caractères interdits |
validate_status_name(value) |
normalise puis vérifie le format [a-z][a-z0-9_]* |
5. Les règles¶
nameest obligatoire et normalisé en snake_case : lettres, chiffres, espaces et tirets en entrée (espaces et tirets deviennent_), et le nom doit commencer par une lettre.labelest optionnel (retombe surname) ;colorest une chaîne libre.- Au plus un statut
is_initial=Truepar liste ; plusieursis_final=Truesont autorisés. - Un doublon de
namedans une liste lèveWorkflowStatusError.
6. Les erreurs¶
WorkflowStatusError est levée pour un nom invalide, un doublon de statut, ou plusieurs statuts initiaux.
7. Contextes d'utilisation¶
- Déclaration :
validate_statuses([...])une fois, au chargement de l'application. - Lecture :
find_status(STATUTS, name)pour retrouver un statut.
8. Voir aussi¶
- Les transitions : les passages autorisés entre statuts.
- Les helpers Jinja : afficher un statut dans un gabarit.