summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-02-03 19:13:16 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-02-03 19:13:16 -0500
commitb069127b2d3f7b3f2c27f91cfcd32152a98c907f (patch)
tree3acd7c44c72d413c2aad2668be4fd5535a9f97ba /lib/sqlalchemy
parent69a66d58c2d77fa52fe4f43456c5017eabe9502b (diff)
downloadsqlalchemy-b069127b2d3f7b3f2c27f91cfcd32152a98c907f.tar.gz
- Improved the initialization logic of composite attributes such that
calling ``MyClass.attribute`` will not require that the configure mappers step has occurred, e.g. it will just work without throwing any error. [ticket:2935]
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/descriptor_props.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/sqlalchemy/orm/descriptor_props.py b/lib/sqlalchemy/orm/descriptor_props.py
index 24b0a15e6..9ecc9bb62 100644
--- a/lib/sqlalchemy/orm/descriptor_props.py
+++ b/lib/sqlalchemy/orm/descriptor_props.py
@@ -165,7 +165,6 @@ class CompositeProperty(DescriptorProperty):
has been associated with its parent mapper.
"""
- self._init_props()
self._setup_arguments_on_columns()
def _create_descriptor(self):
@@ -236,11 +235,12 @@ class CompositeProperty(DescriptorProperty):
for prop in self.props
]
- def _init_props(self):
- self.props = props = []
+ @util.memoized_property
+ def props(self):
+ props = []
for attr in self.attrs:
if isinstance(attr, str):
- prop = self.parent.get_property(attr)
+ prop = self.parent.get_property(attr, _configure_mappers=False)
elif isinstance(attr, schema.Column):
prop = self.parent._columntoproperty[attr]
elif isinstance(attr, attributes.InstrumentedAttribute):
@@ -251,6 +251,7 @@ class CompositeProperty(DescriptorProperty):
"attributes/attribute names as arguments, got: %r"
% (attr,))
props.append(prop)
+ return props
@property
def columns(self):