summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/scoping.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2008-09-27 01:37:26 +0000
committerJason Kirtland <jek@discorporate.us>2008-09-27 01:37:26 +0000
commit29a6af6d46795cd81fa5f8a409409a5215c7b08e (patch)
treebddd1492adf9cf35ac6103fbb04172adfa100edc /lib/sqlalchemy/orm/scoping.py
parenta32c1a1e25710468e62d6499f89e4ad26c90f21d (diff)
downloadsqlalchemy-29a6af6d46795cd81fa5f8a409409a5215c7b08e.tar.gz
Added query_cls= override to scoped_session's query_property
Diffstat (limited to 'lib/sqlalchemy/orm/scoping.py')
-rw-r--r--lib/sqlalchemy/orm/scoping.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/scoping.py b/lib/sqlalchemy/orm/scoping.py
index 422b36263..5dd17a289 100644
--- a/lib/sqlalchemy/orm/scoping.py
+++ b/lib/sqlalchemy/orm/scoping.py
@@ -77,7 +77,7 @@ class ScopedSession(object):
self.session_factory.configure(**kwargs)
- def query_property(self):
+ def query_property(self, query_cls=None):
"""return a class property which produces a `Query` object against the
class when called.
@@ -90,13 +90,26 @@ class ScopedSession(object):
# after mappers are defined
result = MyClass.query.filter(MyClass.name=='foo').all()
- """
+ Produces instances of the session's configured query class by
+ default. To override and use a custom implementation, provide
+ a ``query_cls`` callable. The callable will be invoked with
+ the class's mapper as a positional argument and a session
+ keyword argument.
+
+ There is no limit to the number of query properties placed on
+ a class.
+ """
class query(object):
def __get__(s, instance, owner):
mapper = class_mapper(owner, raiseerror=False)
if mapper:
- return self.registry().query(mapper)
+ if query_cls:
+ # custom query class
+ return query_cls(mapper, session=self.registry())
+ else:
+ # session's configured query class
+ return self.registry().query(mapper)
else:
return None
return query()