[Zope3-checkins] CVS: Zope3/src/transaction - _transaction.py:1.1.2.19

Jeremy Hylton jeremy at zope.com
Mon Mar 22 16:38:21 EST 2004


Update of /cvs-repository/Zope3/src/transaction
In directory cvs.zope.org:/tmp/cvs-serv11438

Modified Files:
      Tag: jeremy-txn-branch
	_transaction.py 
Log Message:
Preliminary code to track transaction status.


=== Zope3/src/transaction/_transaction.py 1.1.2.18 => 1.1.2.19 ===
--- Zope3/src/transaction/_transaction.py:1.1.2.18	Mon Mar 22 15:29:23 2004
+++ Zope3/src/transaction/_transaction.py	Mon Mar 22 16:38:20 2004
@@ -93,9 +93,19 @@
 def myhasattr(obj, attr):
     return getattr(obj, attr, _marker) is not _marker
 
+class Status:
+
+    ACTIVE = "Active"
+    COMMITTING = "Committing"
+    COMMITTED = "Committed"
+    ABORTING = "Aborting"
+    ABORTED = "Aborted"
+    FAILED = "Failed"
+
 class Transaction(object):
 
     def __init__(self, synchronizers, manager):
+        self.status = Status.ACTIVE
         # List of resource managers, e.g. MultiObjectResourceAdapters.
         self._resources = []
         self._synchronizers = synchronizers or []
@@ -125,6 +135,8 @@
         self._nonsub = {}
 
     def join(self, resource):
+        if self.status != Status.ACTIVE:
+            raise ValueError
         self._resources.append(resource)
 
     def register(self, obj):
@@ -164,13 +176,15 @@
             for s in self._synchronizers:
                 s.beforeCompletion()
 
-        # XXX check for the hosed state?
+        if not subtransaction:
+            self.status = Status.COMMITTING
 
         self._commitResources(subtransaction)
 
         if subtransaction:
             self._resources = []
         else:
+            self.status = Status.COMMITTED
             self._manager.free(self)
             for s in self._synchronizers:
                 s.afterCompletion()




More information about the Zope3-Checkins mailing list