From 2a94e3e6c5b751cabba10caddfe880dd03075afe Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 28 Nov 2007 23:44:14 +0000 Subject: [PATCH] cleanup --- lib/sqlalchemy/orm/attributes.py | 31 ++++++++++++++++--------------- lib/sqlalchemy/orm/mapper.py | 5 +++-- lib/sqlalchemy/orm/unitofwork.py | 4 ++-- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 27db05fd19..7b4d286e8d 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -610,9 +610,21 @@ class InstanceState(object): return self.obj() or self.__resurrect(instance_dict) finally: instance_dict._mutex.release() + + def is_modified(self): + if self.modified: + return True + elif getattr(self.class_, '_sa_has_mutable_scalars', False): + for attr in managed_attributes(self.class_): + if getattr(attr.impl, 'mutable_scalars', False) and attr.impl.check_mutable_modified(self): + return True + else: + return False + else: + return False def __resurrect(self, instance_dict): - if self.modified or _is_modified(self): + if self.is_modified(): # store strong ref'ed version of the object; will revert # to weakref when changes are persisted obj = new_instance(self.class_, state=self) @@ -644,7 +656,7 @@ class InstanceState(object): def set_callable(self, key, callable_): self.dict.pop(key, None) self.callables[key] = callable_ - + def __fire_trigger(self): instance = self.obj() self.trigger(instance, [k for k in self.expired_attributes if k not in self.dict]) @@ -904,19 +916,8 @@ def noninherited_managed_attributes(class_): return getattr(class_, '_sa_attrs', []) def is_modified(obj): - return _is_modified(obj._state) - -def _is_modified(state): - if state.modified: - return True - elif getattr(state.class_, '_sa_has_mutable_scalars', False): - for attr in managed_attributes(state.class_): - if getattr(attr.impl, 'mutable_scalars', False) and attr.impl.check_mutable_modified(state): - return True - else: - return False - else: - return False + return obj._state.is_modified() + def get_history(obj, key, **kwargs): diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index bbd8a8dcb6..fef1aaf09f 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -909,7 +909,7 @@ class Mapper(object): def _getpropbycolumn(self, column, raiseerror=True): try: - prop = self._columntoproperty[column] + return self._columntoproperty[column] except KeyError: try: prop = self.__props[column.key] @@ -920,7 +920,6 @@ class Mapper(object): if not raiseerror: return None raise exceptions.InvalidRequestError("No column %s.%s is configured on mapper %s..." % (column.table.name, column.name, str(self))) - return prop def get_attr_by_column(self, obj, column, raiseerror=True): """Return an instance attribute using a Column as the key.""" @@ -1431,6 +1430,8 @@ class Mapper(object): instance = extension.create_instance(self, context, row, self.class_) if instance is EXT_CONTINUE: instance = attributes.new_instance(self.class_) + else: + attributes.manage(instance) else: instance = attributes.new_instance(self.class_) diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index dcb1c32e95..aa0ab1ca96 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -147,7 +147,7 @@ class UnitOfWork(object): if x not in self.deleted and ( x._state.modified - or (getattr(x.__class__, '_sa_has_mutable_scalars', False) and attributes._is_modified(x._state)) + or (getattr(x.__class__, '_sa_has_mutable_scalars', False) and x.state.is_modified()) ) ]) @@ -162,7 +162,7 @@ class UnitOfWork(object): dirty = [x for x in self.identity_map.all_states() if x.modified - or (getattr(x.class_, '_sa_has_mutable_scalars', False) and attributes._is_modified(x)) + or (getattr(x.class_, '_sa_has_mutable_scalars', False) and x.is_modified()) ] if len(dirty) == 0 and len(self.deleted) == 0 and len(self.new) == 0: -- 2.47.2