]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added a new SessionExtension hook called after_attach().
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 15 Jul 2008 14:54:37 +0000 (14:54 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 15 Jul 2008 14:54:37 +0000 (14:54 +0000)
This is called at the point of attachment for objects
via add(), add_all(), delete(), and merge().

CHANGES
VERSION
lib/sqlalchemy/orm/interfaces.py
lib/sqlalchemy/orm/session.py
test/orm/session.py

diff --git a/CHANGES b/CHANGES
index 28672f8a405dc98a37033fbed484bb1511f0b17f..ead13a530904c7f64a85f2b9c60b231e4770a9d0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,13 @@
 =======
 CHANGES
 =======
+0.5beta3
+========
+- orm
+    - Added a new SessionExtension hook called after_attach().
+      This is called at the point of attachment for objects
+      via add(), add_all(), delete(), and merge().
+      
 0.5beta2
 ========
     - 0.5beta2 includes all bugfixes listed under release 
diff --git a/VERSION b/VERSION
index 0b2f9670081f295470f44175db5a76b94e619458..3f499c3151a3f027de60aaefad3575a879390a34 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.5.0beta2
+0.5.0beta3
index 4cfc9462aa375cda2f6492494c23c75005b0a982..96a6e340c17af2967e1aada21ef954e3753d9f5b 100644 (file)
@@ -301,6 +301,11 @@ class SessionExtension(object):
         engine level transaction is begun on a connection.
         """
 
+    def after_attach(self, session, instance):
+        """Execute after an instance is attached to a session.
+
+        This is called after an add, delete or merge.
+        """
 
 class MapperProperty(object):
     """Manage the relationship of a ``Mapper`` to a single class
index b9f1707330eac5ba20ddc7627d1acd0e7b8aa194..380bc8622144a2defedfa9caeb47f78c85aaf75d 100644 (file)
@@ -1283,6 +1283,8 @@ class Session(object):
                                     state.session_id, self.hash_key))
         if state.session_id != self.hash_key:
             state.session_id = self.hash_key
+        if self.extension is not None:
+            self.extension.after_attach(self, state.obj())
 
     def __contains__(self, instance):
         """Return True if the instance is associated with this session.
index 02258a75e017417eaea7b4f738b8852a37fc65de..1e2b3c9dd6cd0acea6b35f5963fd4f2b6b81aa5f 100644 (file)
@@ -889,18 +889,21 @@ class SessionTest(_fixtures.FixtureTest):
                 log.append('after_flush_postexec')
             def after_begin(self, session, transaction, connection):
                 log.append('after_begin')
+            def after_attach(self, session, instance):
+                log.append('after_attach')
+
         sess = create_session(extension = MyExt())
         u = User(name='u1')
         sess.add(u)
         sess.flush()
-        assert log == ['before_flush', 'after_begin', 'after_flush', 'before_commit', 'after_commit', 'after_flush_postexec']
+        assert log == ['after_attach', 'before_flush', 'after_begin', 'after_flush', 'before_commit', 'after_commit', 'after_flush_postexec']
 
         log = []
         sess = create_session(autocommit=False, extension=MyExt())
         u = User(name='u1')
         sess.add(u)
         sess.flush()
-        assert log == ['before_flush', 'after_begin', 'after_flush', 'after_flush_postexec']
+        assert log == ['after_attach', 'before_flush', 'after_begin', 'after_flush', 'after_flush_postexec']
 
         log = []
         u.name = 'ed'