]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 1 Oct 2005 19:47:07 +0000 (19:47 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 1 Oct 2005 19:47:07 +0000 (19:47 +0000)
lib/sqlalchemy/mapper.py
lib/sqlalchemy/objectstore.py

index e9ec1ee5786c7266308d7175dd1529f2e43c9dd8..218c4fb66036275a2f0624eb43638e5cdeecce0c 100644 (file)
@@ -658,17 +658,17 @@ class PropertyLoader(MapperProperty):
             #uowcommit.register_task(self.mapper, True, self, self.parent, False)
         else:
             raise " no foreign key ?"
-                
+
+    def get_object_dependencies(self, obj, uowcommit, passive = True):
+        """function to retreive the child list off of an object.  "passive" means, if its
+         a lazy loaded list that is not loaded yet, dont load it."""
+        if self.uselist:
+            return uowcommit.uow.attributes.get_list_history(obj, self.key, passive = passive)
+        else: 
+            return uowcommit.uow.attributes.get_history(obj, self.key)
+    
     def process_dependencies(self, deplist, uowcommit, delete = False):
         print self.mapper.table.name + " " + repr(deplist.map.values()) + " process_dep isdelete " + repr(delete)
-        
-        # function to retreive the child list off of an object.  "passive" means, if its
-        # a lazy loaded list that is not loaded yet, dont load it.
-        def getlist(obj, passive = True):
-            if self.uselist:
-                return uowcommit.uow.attributes.get_list_history(obj, self.key, passive = passive)
-            else: 
-                return uowcommit.uow.attributes.get_history(obj, self.key)
 
         # fucntion to set properties across a parent/child object plus an "association row",
         # based on a join condition
@@ -676,6 +676,9 @@ class PropertyLoader(MapperProperty):
             self._sync_foreign_keys(binary, obj, child, associationrow, clearkeys)
         setter = BinaryVisitor(sync_foreign_keys)
 
+        def getlist(obj, passive=True):
+            return self.get_object_dependencies(obj, uowcommit, passive)
+            
         associationrow = {}
         
         # plugin point
index 96e2f12ee9ad28002511310e5dd1b4e2da3bb7d1..f4639cb47f34a5caecf29b49c2813038838fd416 100644 (file)
@@ -426,6 +426,26 @@ class UOWTask(object):
             processor.process_dependencies(targettask.objects, trans, delete = self.isdelete)
         if not self.listonly and self.isdelete:
             self.mapper.delete_obj(obj_list, trans)
+
+    def sort_circular_dependencies(self):
+        d = {}
+        head = None
+        for obj in obj_list:
+            d[obj] = UOWTask(self.mapper, self.isdelete, self.listonly)
+            d[obj].dependencies = self.dependencies
+            if head is None:
+                head = obj
+            for dep in self.dependencies:
+                (processor, targettask) = dep
+                if targetttask is self:
+                    for o in processor.get_object_dependencies(obj, self, passive = True):
+                        if o is head:
+                            head = obj
+                        d[obj].objects.append(o)
+        if head is None:
+            return self
+        else:
+            return d[head]
         
     def __str__(self):
         if self.isdelete: