diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-12-20 16:21:31 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-12-20 16:21:31 -0500 |
| commit | 11f2bdff3171470a899ef684d2b833415ce791e5 (patch) | |
| tree | bd031146d2f858e562a5056ee510b3ebeb46bf62 /lib/sqlalchemy/orm | |
| parent | 1bfaa104188d0205a49a2f5b633a07482ee97602 (diff) | |
| download | sqlalchemy-11f2bdff3171470a899ef684d2b833415ce791e5.tar.gz | |
- clean it up a bit
- don't need __set_composite_values__()
- break the bad news about mutations
Diffstat (limited to 'lib/sqlalchemy/orm')
| -rw-r--r-- | lib/sqlalchemy/orm/descriptor_props.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/lib/sqlalchemy/orm/descriptor_props.py b/lib/sqlalchemy/orm/descriptor_props.py index f9df47030..18c1081f3 100644 --- a/lib/sqlalchemy/orm/descriptor_props.py +++ b/lib/sqlalchemy/orm/descriptor_props.py @@ -104,23 +104,33 @@ class CompositeProperty(DescriptorProperty): self.deferred = kwargs.get('deferred', False) self.group = kwargs.get('group', None) - prop = self def fget(instance): - return prop.composite_class( - *[getattr(instance, prop.parent._columntoproperty[col].key) - for col in prop.columns] + # this could be optimized to store the value in __dict__, + # but more complexity and tests would be needed to pick + # up on changes to the mapped columns made independently + # of those on the composite. + return self.composite_class( + *[getattr(instance, key) for key in self._attribute_keys] ) + def fset(instance, value): if value is None: fdel(instance) else: - for col, value in zip(prop.columns, value.__composite_values__()): - setattr(instance, prop.parent._columntoproperty[col].key, value) + for key, value in zip(self._attribute_keys, value.__composite_values__()): + setattr(instance, key, value) def fdel(instance): - for col in prop.columns: - setattr(instance, prop.parent._columntoproperty[col].key, None) + for key in self._attribute_keys: + setattr(instance, key, None) self.descriptor = property(fget, fset, fdel) + + @util.memoized_property + def _attribute_keys(self): + return [ + self.parent._columntoproperty[col].key + for col in self.columns + ] def get_history(self, state, dict_, **kw): """Provided for userland code that uses attributes.get_history().""" |
