Gestionnaire d’annulation¶
L’annulation est une fonctionnalité indispensable dans les applications modernes. Gaphor ne fait pas exception. Disposer d’une fonction d’annulation permet de modifier le modèle et de revenir facilement à un état antérieur.
Aperçu des transactions¶
L’enregistrement et la lecture des modifications dans Gaphor sont gérés par ce dernier. Celui-ci fonctionne de manière transactionnelle. Une transaction doit réussir ou échouer dans son ensemble. Si elle échoue en cours de route, elle est annulée. Dans Gaphor, ceci est réalisé par le module transaction, qui fournit un gestionnaire de contexte Transaction.
Lorsque des transactions ont lieu, elles émettent des événements lors du début et de la fin de la transaction la plus élevée. Les notifications d’événements concernent le début de la transaction, sa validation en cas de succès ou le retour en arrière en cas d’échec.
Le gestionnaire d’annulation ne permet d’effectuer des modifications que dans le cadre d’une transaction. Si une modification est effectuée en dehors d’une transaction, une exception est levée.
Début d’une transaction¶
Un objet
Transactionest créé.L’événement
TransactionBeginest émis.Le
UndoManagerinstancie une nouvelleActionStackqui est l’objet de la transaction, et ajoute l’action d’annulation à la pile.
Les transactions imbriquées sont prises en charge pour permettre l’ajout d’une transaction à l’intérieur d’une autre transaction déjà en cours.
Transaction réussie¶
Un événement
TransactionCommit(Enregistrement de la transaction) est émisLe
UndoManager(Gestionnaire d’annulation) ferme et enregistre la transaction.
Échec de la transaction¶
Un
TransactionRollbackévénement (Annulation de la transaction) est émis.Le
UndoManager( Gestionnaire d’annulation) lit toutes les actions enregistrées, mais ne les stocke pas.
API de transaction¶
Note
Les transactions ne sont nécessaires que si le gestionnaire d’annulation est actif.
- class gaphor.transaction.Transaction(event_manager, context: str | None = None)[source]¶
La transaction.
Un événement est émis au début et à la fin d’une transaction. Les transactions peuvent être imbriquées. Les événements ne sont émis qu’au début et à la fin de la transaction la plus externe.
Notez que les transactions sont un concept global.
>>> import gaphor.core.eventmanager >>> event_manager = gaphor.core.eventmanager.EventManager()
Les transactions peuvent être imbriquées. Si la transaction la plus externe est validée ou annulée, un événement est émis.
Il est plus pratique d’utiliser
Transactioncomme gestionnaire de contexte :>>> with Transaction(event_manager) as ctx: ... ... # do actions ... # in case the transaction should be rolled back: ... ctx.rollback()
Les événements peuvent être gérés par programme, bien que cela soit déconseillé :
>>> tx = Transaction(event_manager) >>> tx.commit()
- commit()[source]¶
Mises à jour des traductions.
La transaction est clôturée. Un événement
TransactionCommitest émis. Si la transaction doit être annulée, un événementTransactionRollbackest émis à la place.
- classmethod mark_rollback()[source]¶
Marquer la transaction pour un retour en arrière.
Cette opération en elle-même ne clôturera pas la transaction, mais vous permettra de revenir élégamment sur les modifications.
- rollback()[source]¶
Reprendre la transaction.
Tout d’abord, la transaction est fermée. Un événement
TransactionRollbackest émis.
- class gaphor.event.TransactionBegin(context: str | None)[source]¶
Cet événement marque le début d’une transaction.
Les transactions (sous-) imbriquées ne doivent pas émettre ce signal.