diff options
author | Jason Kirtland <jek@discorporate.us> | 2008-09-27 01:37:26 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2008-09-27 01:37:26 +0000 |
commit | 29a6af6d46795cd81fa5f8a409409a5215c7b08e (patch) | |
tree | bddd1492adf9cf35ac6103fbb04172adfa100edc /lib/sqlalchemy/orm/scoping.py | |
parent | a32c1a1e25710468e62d6499f89e4ad26c90f21d (diff) | |
download | sqlalchemy-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.py | 19 |
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() |