# HG changeset patch # User casties # Date 1369751797 -7200 # Node ID 1acfcaaa5ca38e5ec898e6c6c51f0936f7197da6 # Parent bba951ea747905f7a9f7dc79e336fce2ad2cc506 fixed HashTree.getSubTreeAsList when using breadth first. diff -r bba951ea7479 -r 1acfcaaa5ca3 HashTree.py --- a/HashTree.py Tue May 28 14:08:52 2013 +0200 +++ b/HashTree.py Tue May 28 16:36:37 2013 +0200 @@ -32,16 +32,19 @@ def getSubtreeAsList(self, depthFirst=True): """Return the subtree as flattened list sorted by key.""" + if depthFirst: + return self.getSubtreeAsListDepthFirst() + else: + return self.getSubtreeAsListBreadthFirst() + + + def getSubtreeAsListDepthFirst(self): + """Return the subtree as flattened list, depth first, sorted by key.""" if self.children is None: - if depthFirst: - if self.value is None: - return [] - else: - return [self.value] - + if self.value is None: + return [] else: - # breadth first - value has already been added - return [] + return [self.value] else: if self.value is None: @@ -49,25 +52,30 @@ else: sub = [self.value] - if depthFirst: - # depth first - for k in sorted(self.children.keys()): - sub.extend(self.children.get(k).getSubtreeAsList()) + for k in sorted(self.children.keys()): + sub.extend(self.children.get(k).getSubtreeAsListDepthFirst()) - 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 + + + def getSubtreeAsListBreadthFirst(self): + """Return the subtree as flattened list, breadth first, sorted by key.""" + q = [self] + sub = [] + while len(q) > 0 and len(q) < 100: + node = q.pop(0) + if node.value is not None: + sub.append(node.value) + if node.children is not None: + clist = sorted(node.children.values(), key=lambda x:x.key) + q.extend(clist) + return sub def getSubtreeAsText(self): - """prints whole tree as text""" + """Return whole tree as text. Depth first.""" if self.children is None: return "(%s:%s)"%(self.key, self.value) else: @@ -78,8 +86,6 @@ return sub + "] " - - class HashTree: """Tree using dictionaries""" diff -r bba951ea7479 -r 1acfcaaa5ca3 MPIWGProjects.py --- a/MPIWGProjects.py Tue May 28 14:08:52 2013 +0200 +++ b/MPIWGProjects.py Tue May 28 16:36:37 2013 +0200 @@ -1765,7 +1765,7 @@ return [] pl = node.getSubtreeAsList(depthFirst=depthFirst) - # logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,pl)) + #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,[p.getNumber() for p in pl])) # return filtered list return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))]