Mercurial > hg > MPIWGWeb
changeset 114:1acfcaaa5ca3
fixed HashTree.getSubTreeAsList when using breadth first.
author | casties |
---|---|
date | Tue, 28 May 2013 16:36:37 +0200 |
parents | bba951ea7479 |
children | 014efa0923be |
files | HashTree.py MPIWGProjects.py |
diffstat | 2 files changed, 30 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- 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"""
--- 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))]