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
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):
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
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
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):
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