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

  1. Un objet Transaction est créé.

  2. L’événement TransactionBegin est émis.

  3. Le UndoManager instancie une nouvelle ActionStack qui 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

  1. Un événement TransactionCommit (Enregistrement de la transaction) est émis

  2. Le UndoManager (Gestionnaire d’annulation) ferme et enregistre la transaction.

Échec de la transaction

  1. Un TransactionRollback événement (Annulation de la transaction) est émis.

  2. 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 Transaction comme 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 TransactionCommit est émis. Si la transaction doit être annulée, un événement TransactionRollback est émis à la place.

classmethod in_transaction() bool[source]

Êtes-vous en train d’effectuer une transaction ?

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 TransactionRollback est é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.

class gaphor.event.TransactionCommit(context: str | None)[source]

Cet événement est émis lorsqu’une transaction (de niveau supérieur) est validée avec succès.

class gaphor.event.TransactionRollback(context: str | None)[source]

Cet événement est émis pour indiquer que l’opération a échoué.

Si un ensemble d’opérations échoue (par exemple en raison d’une exception), la transaction doit être marquée pour un retour en arrière.

Références