[Checkins] SVN: zope.sqlalchemy/trunk/ Update datamanager.mark_changed to handle sessions which have not yet logged a query.
Wichert Akkerman
wichert at wiggy.net
Sat Jan 8 10:12:40 EST 2011
Log message for revision 119453:
Update datamanager.mark_changed to handle sessions which have not yet logged a query.
Changed:
U zope.sqlalchemy/trunk/CHANGES.txt
U zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py
U zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py
-=-
Modified: zope.sqlalchemy/trunk/CHANGES.txt
===================================================================
--- zope.sqlalchemy/trunk/CHANGES.txt 2011-01-07 22:04:17 UTC (rev 119452)
+++ zope.sqlalchemy/trunk/CHANGES.txt 2011-01-08 15:12:39 UTC (rev 119453)
@@ -1,6 +1,13 @@
Changes
=======
+0.7 (unreleased)
+----------------
+
+* Update datamanager.mark_changed to handle sessions which have not yet logged
+ a (ORM) query.
+
+
0.6 (2010-07-24)
----------------
Modified: zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py
===================================================================
--- zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py 2011-01-07 22:04:17 UTC (rev 119452)
+++ zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py 2011-01-08 15:12:39 UTC (rev 119453)
@@ -199,12 +199,15 @@
transaction_manager.get().join(DataManager(session, initial_state, transaction_manager))
def mark_changed(session):
- """Mark a session as needing to be committed
+ """Mark a session as needing to be committed.
"""
- assert _SESSION_STATE[id(session)] is not STATUS_READONLY
- _SESSION_STATE[id(session)] = STATUS_CHANGED
+ session_id = id(session)
+ if session_id in _SESSION_STATE:
+ assert _SESSION_STATE[session_id] is not STATUS_READONLY
+ _SESSION_STATE[session_id] = STATUS_CHANGED
+
class ZopeTransactionExtension(SessionExtension):
"""Record that a flush has occurred on a session's connection. This allows
the DataManager to rollback rather than commit on read only transactions.
Modified: zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py
===================================================================
--- zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py 2011-01-07 22:04:17 UTC (rev 119452)
+++ zope.sqlalchemy/trunk/src/zope/sqlalchemy/tests.py 2011-01-08 15:12:39 UTC (rev 119453)
@@ -156,6 +156,14 @@
metadata.drop_all(engine)
orm.clear_mappers()
+ def testMarkUnknownSession(self):
+ import zope.sqlalchemy.datamanager
+ dummy = DummyDataManager(key='dummy.first')
+ session = Session()
+ mark_changed(session)
+ self.assertTrue(id(session) in zope.sqlalchemy.datamanager._SESSION_STATE)
+
+
def testAbortBeforeCommit(self):
# Simulate what happens in a conflict error
dummy = DummyDataManager(key='dummy.first')
More information about the checkins
mailing list