From: Mike Bayer Date: Thu, 21 Jan 2010 20:41:52 +0000 (+0000) Subject: - ensure correct session usage + tests X-Git-Tag: rel_0_6beta1~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=196284c083fc26c5ea87229f9e956f6584d27cc5;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - ensure correct session usage + tests --- diff --git a/lib/sqlalchemy/ext/sqlsoup.py b/lib/sqlalchemy/ext/sqlsoup.py index b2790c56e3..6b977102c9 100644 --- a/lib/sqlalchemy/ext/sqlsoup.py +++ b/lib/sqlalchemy/ext/sqlsoup.py @@ -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 diff --git a/test/ext/test_sqlsoup.py b/test/ext/test_sqlsoup.py index 9904b982d1..0593a8ac42 100644 --- a/test/ext/test_sqlsoup.py +++ b/test/ext/test_sqlsoup.py @@ -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