]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
cleanup
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 28 Nov 2007 23:44:14 +0000 (23:44 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 28 Nov 2007 23:44:14 +0000 (23:44 +0000)
lib/sqlalchemy/orm/attributes.py
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/orm/unitofwork.py

index 27db05fd19779174de85bba2be7ce0f959fe94b3..7b4d286e8d04e3a34da6d55b3e51847e572d98f6 100644 (file)
@@ -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):
 
index bbd8a8dcb6e69a5369511cf3c8366b1ddaa4508a..fef1aaf09fb05ef6667044789f8172fc021ef78c 100644 (file)
@@ -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_)
                 
index dcb1c32e95a8d0ba26153c2636763707eff343bd..aa0ab1ca96ad032b16e71cfc81215645e430ca24 100644 (file)
@@ -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: