diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-06 20:11:18 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-06 20:11:18 -0400 |
| commit | 518b374f5bf57db92a7f8bdf408bc06f561e1f0d (patch) | |
| tree | 38da773ff75ab88a9d22f3ecbfffb85ffadece29 /lib/sqlalchemy/ext/hybrid.py | |
| parent | 0d0ed62f73d2465e06a26f3c82ef5e271c8fc460 (diff) | |
| download | sqlalchemy-518b374f5bf57db92a7f8bdf408bc06f561e1f0d.tar.gz | |
some cleanup, some screwing around with comparators...many more issues coming up
Diffstat (limited to 'lib/sqlalchemy/ext/hybrid.py')
| -rw-r--r-- | lib/sqlalchemy/ext/hybrid.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/sqlalchemy/ext/hybrid.py b/lib/sqlalchemy/ext/hybrid.py index 3134db12d..b74b407c5 100644 --- a/lib/sqlalchemy/ext/hybrid.py +++ b/lib/sqlalchemy/ext/hybrid.py @@ -63,6 +63,7 @@ or as the class itself:: """ from sqlalchemy import util +from sqlalchemy.orm import attributes, interfaces class method(object): def __init__(self, func, expr=None): @@ -111,4 +112,34 @@ class property_(object): self.expr = expr return self + def compare_with(self, comparator): + proxy_attr = attributes.\ + create_proxied_attribute(self) + def expr(owner): + return proxy_attr(self.__name__, self, comparator(owner)) + self.expr = expr + return self + + +class Comparator(interfaces.PropComparator): + def __init__(self, expression, adapter=None): + self._expression = expression + self.adapter = adapter + + @property + def expression(self): + return self.__clause_element__() + + def __clause_element__(self): + if self.adapter: + return self.adapter(self._expression) + else: + return self._expression + + def adapted(self, adapter): + return self.__class__(self._expression, adapter) + + + +
\ No newline at end of file |
