[Checkins] SVN: z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/ emit events before and after SA session flush

Godefroid Chapelle gotcha at bubblenet.be
Mon Sep 24 09:30:46 EDT 2007


Log message for revision 79876:
  emit events before and after SA session flush

Changed:
  U   z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/base.py
  U   z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/interfaces.py

-=-
Modified: z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/base.py
===================================================================
--- z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/base.py	2007-09-24 13:23:21 UTC (rev 79875)
+++ z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/base.py	2007-09-24 13:30:46 UTC (rev 79876)
@@ -12,11 +12,13 @@
 import sqlalchemy
 from sqlalchemy.engine.url import make_url
 
+from zope.event import notify
 from zope.interface import implements
 from zope.component import getUtility
 from zope.component.interfaces import ComponentLookupError
 
 from z3c.sqlalchemy.interfaces import ISQLAlchemyWrapper, IModelProvider
+from z3c.sqlalchemy.interfaces import ISessionFlushedEvent, IBeforeSessionFlushEvent
 from z3c.sqlalchemy.model import Model
 from z3c.sqlalchemy.mapper import LazyMapperCollection
 
@@ -165,14 +167,16 @@
     def _flush(self):
         # check if the session contains something flushable
         if self.session.new or self.session.deleted or self.session.dirty:
-
+        
             # Check if a session-bound transaction has been created so far.
             # If not, create a new transaction
             if self.transaction is None:
                 self.transaction = self.session.create_transaction()
 
             # Flush
+            notify(BeforeSessionFlushEvent(self.session))
             self.session.flush()
+            notify(SessionFlushedEvent(self.session))
 
     def commit(self, trans):
         self._flush()
@@ -293,3 +297,13 @@
         # return the connection
         return connection
 
+class SessionEvent(object):
+    def __init__(self, session):
+        self.session = session
+
+class SessionFlushedEvent(SessionEvent):
+    implements(ISessionFlushedEvent)
+
+class BeforeSessionFlushEvent(SessionEvent):
+    implements(IBeforeSessionFlushEvent)
+

Modified: z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/interfaces.py
===================================================================
--- z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/interfaces.py	2007-09-24 13:23:21 UTC (rev 79875)
+++ z3c.sqlalchemy/branches/sessionflushevents/src/z3c/sqlalchemy/interfaces.py	2007-09-24 13:30:46 UTC (rev 79876)
@@ -98,3 +98,9 @@
     def items():
         """ return items in insertion order """
 
+
+class ISessionFlushedEvent(Interface):
+    """ Event triggered after session has been flushed """
+
+class IBeforeSessionFlushEvent(Interface):
+    """ Event triggered before session will be flushed """



More information about the Checkins mailing list