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)
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])
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):
def _getpropbycolumn(self, column, raiseerror=True):
try:
- prop = self._columntoproperty[column]
+ return self._columntoproperty[column]
except KeyError:
try:
prop = self.__props[column.key]
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."""
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_)
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())
)
])
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: