# HG changeset patch # User casties # Date 1369659596 -7200 # Node ID 246d87d33f25e8cbc0fc7104fbea9bdb60a927da # Parent cafdf06c77ce9c5dc86a5e370c81935256e081e0 CLOSED - # 79: sortierung der liste der projekte pro abteilung https://it-dev.mpiwg-berlin.mpg.de/tracs/webpage/ticket/79 diff -r cafdf06c77ce -r 246d87d33f25 HashTree.py --- 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): diff -r cafdf06c77ce -r 246d87d33f25 MPIWGDepartment.py --- 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] diff -r cafdf06c77ce -r 246d87d33f25 MPIWGProjects.py --- 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))]