changeset 105:246d87d33f25

CLOSED - # 79: sortierung der liste der projekte pro abteilung https://it-dev.mpiwg-berlin.mpg.de/tracs/webpage/ticket/79
author casties
date Mon, 27 May 2013 14:59:56 +0200
parents cafdf06c77ce
children 7dd264f9b728 782477730916
files HashTree.py MPIWGDepartment.py MPIWGProjects.py
diffstat 3 files changed, 28 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/HashTree.py	Mon May 27 11:58:49 2013 +0200
+++ b/HashTree.py	Mon May 27 14:59:56 2013 +0200
@@ -30,13 +30,18 @@
             self.children[node.key] = node
             
 
-    def getSubtreeAsList(self):
-        """returns the subtree as flattened list sorted by key (depth first)"""
+    def getSubtreeAsList(self, depthFirst=True):
+        """Return the subtree as flattened list sorted by key."""
         if self.children is None:
-            if self.value is None:
+            if depthFirst:
+                if self.value is None:
+                    return []
+                else:
+                    return [self.value]
+                
+            else:
+                # breadth first - value has already been added
                 return []
-            else:
-                return [self.value]
             
         else:
             if self.value is None:
@@ -44,10 +49,21 @@
             else:
                 sub = [self.value]
                 
-            for k in sorted(self.children.keys()):
-                sub.extend(self.children.get(k).getSubtreeAsList())
+            if depthFirst:
+                # depth first
+                for k in sorted(self.children.keys()):
+                    sub.extend(self.children.get(k).getSubtreeAsList())
+                    
+            else:
+                # breadth first
+                clist = sorted(self.children.values(), key=lambda x:x.key)
+                # add all children
+                sub.extend([c.value for c in clist if c.value is not None])
+                # then their children
+                for c in clist:
+                    sub.extend(c.getSubtreeAsList(depthFirst=True))
                 
-            return sub
+        return sub
 
 
     def getSubtreeAsText(self):
--- a/MPIWGDepartment.py	Mon May 27 11:58:49 2013 +0200
+++ b/MPIWGDepartment.py	Mon May 27 14:59:56 2013 +0200
@@ -151,7 +151,7 @@
         proj = pf.getProject(projectNumber=self.getProjectNumber())
         return proj
 
-    def getProjects(self, count=0, active=0, archived=0):
+    def getProjects(self, count=0, active=0, archived=0, depthFirst=True):
         """returns a list of projects of this department.
         
         active = 0 : all projects
@@ -163,7 +163,7 @@
         archived = 2 : archived projects
         """
         pf = self.getMPIWGRoot().getProjectFolder()
-        projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived)
+        projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived, depthFirst=depthFirst)
         #logging.debug("getProjects projects=%s"%repr(projects))
         if count > 0:
             return projects[:count]
--- a/MPIWGProjects.py	Mon May 27 11:58:49 2013 +0200
+++ b/MPIWGProjects.py	Mon May 27 14:59:56 2013 +0200
@@ -1748,7 +1748,7 @@
         return tree
     
     
-    def getProjectsAsList(self, start=None, active=1, archived=1):
+    def getProjectsAsList(self, start=None, active=1, archived=1, depthFirst=True):
         """Return flattened list of projects, starting from start.
 
         active = 0 : all projects
@@ -1764,7 +1764,7 @@
         if node is None:
             return []
 
-        pl = node.getSubtreeAsList()
+        pl = node.getSubtreeAsList(depthFirst=depthFirst)
         # logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,pl))
         # return filtered list
         return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))]