[Checkins] SVN: z3c.zalchemy/trunk/s Moving forward with better
transaction integration.
Christian Theune
ct at gocept.com
Fri Jan 25 08:45:03 EST 2008
Log message for revision 83232:
Moving forward with better transaction integration.
Changed:
U z3c.zalchemy/trunk/setup.py
U z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py
-=-
Modified: z3c.zalchemy/trunk/setup.py
===================================================================
--- z3c.zalchemy/trunk/setup.py 2008-01-25 06:45:16 UTC (rev 83231)
+++ z3c.zalchemy/trunk/setup.py 2008-01-25 13:45:03 UTC (rev 83232)
@@ -20,7 +20,7 @@
include_package_data = True,
zip_safe=False,
install_requires=['setuptools',
- 'SQLAlchemy>=0.4',
+ 'SQLAlchemy>=0.4.2p4dev',
'ZODB3',
'zope.component',
'zope.interface',
Modified: z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py
===================================================================
--- z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py 2008-01-25 06:45:16 UTC (rev 83231)
+++ z3c.zalchemy/trunk/src/z3c/zalchemy/datamanager.py 2008-01-25 13:45:03 UTC (rev 83232)
@@ -29,9 +29,11 @@
from sqlalchemy.orm import scoped_session, sessionmaker
+
class AlchemyEngineUtility(persistent.Persistent):
"""A utility providing a database engine.
"""
+
implements(z3c.zalchemy.interfaces.IAlchemyEngineUtility)
def __init__(self, name, dsn, echo=False, encoding='utf-8',
@@ -205,11 +207,14 @@
self.session = session
def abort(self, trans):
- self.session.rollback()
- self._cleanup()
+ self._abort()
def commit(self, trans):
+ # Flush instructions to the database (because of conflict integration)
self._flush_session()
+ # Commit any nested transactions (savepoints)
+ while self.session.transaction.nested:
+ self.session.commit()
def tpc_begin(self, trans):
pass
@@ -222,8 +227,7 @@
self._cleanup()
def tpc_abort(self, trans):
- self.session.rollback()
- self._cleanup()
+ self._abort()
def sortKey(self):
return str(id(self))
@@ -231,11 +235,18 @@
def savepoint(self):
self._flush_session()
transaction = self.session.begin_nested()
+ self._flush_session()
return AlchemySavepoint(transaction, self.session)
def _cleanup(self):
Session.remove()
+ def _abort(self):
+ while self.session.transaction.nested:
+ self.session.transaction.close()
+ self.session.rollback()
+ self._cleanup()
+
def _flush_session(self):
try:
self.session.flush()
More information about the Checkins
mailing list