[Checkins] SVN: zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py Make mark_changed ensure a session is joined to the transaction

Laurence Rowe l at lrowe.co.uk
Sat Jan 8 12:06:08 EST 2011


Log message for revision 119454:
  Make mark_changed ensure a session is joined to the transaction

Changed:
  U   zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py

-=-
Modified: zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py
===================================================================
--- zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py	2011-01-08 15:12:39 UTC (rev 119453)
+++ zope.sqlalchemy/trunk/src/zope/sqlalchemy/datamanager.py	2011-01-08 17:06:07 UTC (rev 119454)
@@ -198,13 +198,12 @@
             DataManager = SessionDataManager
         transaction_manager.get().join(DataManager(session, initial_state, transaction_manager))
 
-def mark_changed(session):
+def mark_changed(session, transaction_manager=zope_transaction.manager):
     """Mark a session as needing to be committed.
     """
     session_id = id(session)
-    if session_id in _SESSION_STATE:
-        assert _SESSION_STATE[session_id] is not STATUS_READONLY
-
+    assert _SESSION_STATE.get(session_id, None) is not STATUS_READONLY, "Session already registered as read only"
+    join_transaction(session, STATUS_CHANGED, transaction_manager)
     _SESSION_STATE[session_id] = STATUS_CHANGED
 
 
@@ -226,13 +225,13 @@
         join_transaction(session, self.initial_state, self.transaction_manager)
     
     def after_flush(self, session, flush_context):
-        mark_changed(session)
+        mark_changed(session, self.transaction_manager)
         
     def after_bulk_update(self, session, query, query_context, result):
-        mark_changed(session)
+        mark_changed(session, self.transaction_manager)
 
     def after_bulk_delete(self, session, query, query_context, result):
-        mark_changed(session)
+        mark_changed(session, self.transaction_manager)
     
     def before_commit(self, session):
         assert self.transaction_manager.get().status == ZopeStatus.COMMITTING, "Transaction must be committed using the transaction manager"



More information about the checkins mailing list