diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-10-20 14:34:16 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-10-20 14:35:09 -0400 |
| commit | f14a58dea4b825beb4baaef44389880927543cc4 (patch) | |
| tree | 37a0f910e13acd2e093f57ca276cf4153b31eb59 /lib/sqlalchemy/ext/associationproxy.py | |
| parent | 55b511c3960cad636ff1e512594368a36a85ce5c (diff) | |
| download | sqlalchemy-f14a58dea4b825beb4baaef44389880927543cc4.tar.gz | |
Resolve AliasedClass when determining owning class of association proxy
Fixed bug where the association proxy would inadvertently link itself
to an :class:`.AliasedClass` object if it were called first with
the :class:`.AliasedClass` as a parent, causing errors upon subsequent
usage.
Change-Id: I9161bab67766bb75d73ca54d712ad1cad6de40dc
Fixes: #4116
Diffstat (limited to 'lib/sqlalchemy/ext/associationproxy.py')
| -rw-r--r-- | lib/sqlalchemy/ext/associationproxy.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index 16a4f3540..c0dbb538e 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -19,6 +19,7 @@ import weakref from .. import exc, orm, util from ..orm import collections, interfaces from ..sql import not_, or_ +from .. import inspect def association_proxy(target_collection, attr, **kw): @@ -245,7 +246,17 @@ class AssociationProxy(interfaces.InspectionAttrInfo): def __get__(self, obj, class_): if self.owning_class is None: - self.owning_class = class_ and class_ or type(obj) + try: + insp = inspect(class_) + except exc.NoInspectionAvailable: + pass + else: + if hasattr(insp, 'mapper'): + self.owning_class = insp.mapper.class_ + + if self.owning_class is None: + self.owning_class = type(obj) + if obj is None: return self |
