Source code for pybraincompare.annotate.JSONEncoder

#!/usr/bin/env python

import sys
import json
import UserDict

[docs]class Node(object): def __init__(self, nid, parent, name, meta = None): self.nid = nid self.parent = parent self.children = [] self.name = name self.meta = [meta] # should be dictionary!
[docs]class NodeDict(UserDict.UserDict):
[docs] def addNodes(self, nodes): """ Add every node as a child to its parent by doing two passes.""" for i in (1, 2): for node in nodes: self.data[node.nid] = node if node.parent in self.data.keys(): if node.parent != "none" and node not in self.data[node.parent].children: self.data[node.parent].children.append(node)
[docs]class NodeJSONEncoder(json.JSONEncoder):
[docs] def default(self, node): if type(node) == Node: return {"nid":node.nid, "name":node.name, "meta":node.meta,"children":node.children} raise TypeError("{} is not an instance of Node".format(node))
if __name__ == "__main__": nodes = [] with open(sys.argv[1]) as f: for row in f.readlines()[1:]: nid, parent, name = row.split() nodes.append(Node(nid, parent, name)) nodeDict = NodeDict() nodeDict.addNodes(nodes) rootNodes = [node for nid, node in nodeDict.items() if node.parent == "none"] for rootNode in rootNodes: print NodeJSONEncoder().encode(rootNode)