diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-20 12:55:46 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-11-20 12:55:46 -0500 |
commit | c5442b3adb56cae15607aad32b4219ac11ae809e (patch) | |
tree | 0502f97a14672dd089adab6184681cb7a0f3bfea /lib/sqlalchemy/orm/util.py | |
parent | d505ea71aed44ecae718052131dc0a2fb2c9dd99 (diff) | |
parent | 6dbf2c3314a797a39624f1e68569bfbbb2b6ac87 (diff) | |
download | sqlalchemy-c5442b3adb56cae15607aad32b4219ac11ae809e.tar.gz |
- merge hybrid attributes branch, [ticket:1903]
Diffstat (limited to 'lib/sqlalchemy/orm/util.py')
-rw-r--r-- | lib/sqlalchemy/orm/util.py | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 9447eed30..0e0d6f568 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -275,13 +275,6 @@ class AliasedClass(object): return queryattr def __getattr__(self, key): - if self.__mapper.has_property(key): - return self.__adapt_prop( - self.__mapper.get_property( - key, _compile_mappers=False - ) - ) - for base in self.__target.__mro__: try: attr = object.__getattribute__(base, key) @@ -291,15 +284,20 @@ class AliasedClass(object): break else: raise AttributeError(key) - - if hasattr(attr, 'func_code'): + + if isinstance(attr, attributes.QueryableAttribute): + return self.__adapt_prop(attr.property) + elif hasattr(attr, 'func_code'): is_method = getattr(self.__target, key, None) if is_method and is_method.im_self is not None: return util.types.MethodType(attr.im_func, self, self) else: return None elif hasattr(attr, '__get__'): - return attr.__get__(None, self) + ret = attr.__get__(None, self) + if isinstance(ret, PropComparator): + return ret.adapted(self.__adapt_element) + return ret else: return attr @@ -437,7 +435,7 @@ def with_parent(instance, prop): """ if isinstance(prop, basestring): mapper = object_mapper(instance) - prop = mapper.get_property(prop, resolve_synonyms=True) + prop = mapper.get_property(prop) elif isinstance(prop, attributes.QueryableAttribute): prop = prop.property @@ -486,7 +484,7 @@ def _entity_descriptor(entity, key): """ if not isinstance(entity, (AliasedClass, type)): entity = entity.class_ - + try: return getattr(entity, key) except AttributeError: |