diff options
Diffstat (limited to 'lib/sqlalchemy/ext')
| -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 |
