]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- ensure correct session usage + tests
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 21 Jan 2010 20:41:52 +0000 (20:41 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 21 Jan 2010 20:41:52 +0000 (20:41 +0000)
lib/sqlalchemy/ext/sqlsoup.py
test/ext/test_sqlsoup.py

index b2790c56e36d73abe7390c1e6dbbe9f0e7c9fff1..6b977102c9d71ba0e3bd9e162cc9fe62349bbcd3 100644 (file)
@@ -395,7 +395,7 @@ def _selectable_name(selectable):
             x = x[1:]
         return x
 
-def class_for_table(selectable, **mapper_kwargs):
+def class_for_table(session, selectable, **mapper_kwargs):
     selectable = expression._clause_element_as_expr(selectable)
     mapname = 'Mapped' + _selectable_name(selectable)
     # Py2K
@@ -429,13 +429,13 @@ def class_for_table(selectable, **mapper_kwargs):
     klass.c = expression.ColumnCollection()
     mappr = mapper(klass,
                    selectable,
-                   extension=AutoAdd(Session),
+                   extension=AutoAdd(session),
                    **mapper_kwargs)
                    
     for k in mappr.iterate_properties:
         klass.c[k.key] = k.columns[0]
     
-    klass._query = Session.query_property()
+    klass._query = session.query_property()
     return klass
 
 class SqlSoup(object):
@@ -502,7 +502,7 @@ class SqlSoup(object):
         try:
             t = self._cache[selectable]
         except KeyError:
-            t = class_for_table(selectable, **kwargs)
+            t = class_for_table(self.session, selectable, **kwargs)
             self._cache[selectable] = t
         return t
 
@@ -525,7 +525,7 @@ class SqlSoup(object):
             if not table.primary_key.columns:
                 raise PKNotFoundError('table %r does not have a primary key defined [columns: %s]' % (attr, ','.join(table.c.keys())))
             if table.columns:
-                t = class_for_table(table)
+                t = class_for_table(self.session, table)
             else:
                 t = None
             self._cache[attr] = t
index 9904b982d1dcba777a2ca38b9ef101587128ff0f..0593a8ac42ffebaa88c2dbaa695ce83ff538f394 100644 (file)
@@ -4,6 +4,7 @@ from sqlalchemy.ext import sqlsoup
 from sqlalchemy.test.testing import TestBase, eq_, assert_raises
 from sqlalchemy import create_engine, or_, desc, select, func, exc, Table,\
                         util
+from sqlalchemy.orm import scoped_session, sessionmaker
 import datetime
 
 class SQLSoupTest(TestBase):
@@ -214,7 +215,20 @@ class SQLSoupTest(TestBase):
         db.users.relate('loans', db.loans, 
                 order_by=db.loans.loan_date, cascade='all, delete-orphan')
         
-    
+    def test_explicit_session(self):
+        Session = scoped_session(sessionmaker())
+        db = sqlsoup.SqlSoup(engine, session=Session)
+        try:
+            MappedUsers = db.users
+            sess = Session()
+            assert db.users._query.session is db.users.session is sess
+        
+            row = db.users.insert(name='new name', email='new email')
+            assert row in sess
+        finally:
+            sess.rollback()
+            sess.close()
+        
     def test_selectable(self):
         db = sqlsoup.SqlSoup(engine)
         MappedBooks = db.books