Mercurial > hg > MPIWGWeb
changeset 228:afc96bc56817
also show multiple projects with the same number (including none) in the tree.
author | casties |
---|---|
date | Tue, 05 Nov 2013 13:58:45 +0100 |
parents | a328c112e372 |
children | d4216a848547 |
files | HashTree.py MPIWGProjects.py |
diffstat | 2 files changed, 44 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/HashTree.py Wed Oct 30 17:44:42 2013 +0100 +++ b/HashTree.py Tue Nov 05 13:58:45 2013 +0100 @@ -13,6 +13,39 @@ self.value = value self.children = children + def setValue(self, val, append=True): + """set or append to the value""" + if (self.value is not None) or append: + if isinstance(self.value, list): + # old value is list + self.value.append(val) + elif self.value is not None: + # old value is scalar + self.value = [self.value, val] + else: + # old value is None + self.value = val + + else: + self.value = val + + + def getValue(self, onlyFirst=True, asList=False): + """get the (first) value""" + if isinstance(self.value, list): + if onlyFirst and not asList: + return self.value[0] + else: + return self.value + else: + if asList: + if self.value is None: + return [] + else: + return [self.value] + else: + return self.value + def getNode(self, key): """return node under key""" @@ -44,13 +77,13 @@ if self.value is None: return [] else: - return [self.value] + return self.getValue(asList=True) else: if self.value is None: sub = [] else: - sub = [self.value] + sub = self.getValue(asList=True) for k in sorted(self.children.keys()): sub.extend(self.children.get(k).getSubtreeAsListDepthFirst()) @@ -65,7 +98,7 @@ while len(q) > 0: node = q.pop(0) if node.value is not None: - sub.append(node.value) + sub.extend(node.getValue(asList=True)) if node.children is not None: clist = sorted(node.children.values(), key=lambda x:x.key) @@ -147,7 +180,7 @@ return node - def get(self, key): + def get(self, key, onlyFirst=True): """Return value under key from the tree. key can be sequence of key string or a single string using keySeparator. @@ -156,7 +189,7 @@ if node is None: return None - return node.value + return node.getValue(onlyFirst=onlyFirst) def add(self, key, value): @@ -166,6 +199,7 @@ """ keys = self._splitkey(key) node = self.root + logging.debug("hashtree.add: keys=%s value=%s"%(repr(keys), repr(value))) for k in keys: nextnode = node.getNode(k) if nextnode is None: @@ -174,7 +208,7 @@ node = nextnode - node.value = value + node.setValue(value) def getChildrenOf(self, key): @@ -186,7 +220,7 @@ # sort children by key childlist = sorted(node.children.items(), key=lambda x:x[0]) # and return the values - return [n.value for k, n in childlist if n.value is not None] + return [n.getValue() for k, n in childlist if n.value is not None] def getAncestorsOf(self, key):
--- a/MPIWGProjects.py Wed Oct 30 17:44:42 2013 +0100 +++ b/MPIWGProjects.py Tue Nov 05 13:58:45 2013 +0100 @@ -1881,6 +1881,7 @@ tree = HashTree(keySeparator='.', keyFn=getInt) for p in self.objectValues(spec='MPIWGProject'): # add all projects + logging.debug("add to project tree: %s, %s"%(repr(p.getNumber()),p)) tree.add(p.getNumber(), p) self._v_projectTree = tree @@ -1906,6 +1907,8 @@ return [] pl = node.getSubtreeAsList(depthFirst=depthFirst) + #logging.debug("getProjectsAsList: tree=%s"%node.getSubtreeAsText()) + #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,repr(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))]