[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