MCPcopy Create free account
hub / github.com/ActiveState/code / ast2xml

Class ast2xml

recipes/Python/579019_Python_AST_to_XML/recipe-579019.py:25–50  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23 return reparsed.toprettyxml(indent=" ")
24
25class ast2xml(ast.NodeVisitor):
26 def __init__(self):
27 super(ast.NodeVisitor, self).__init__()
28 self.path = []
29 self.root = etree.Element('ast')
30 self.celement = self.root
31 def convert(self, tree):
32 self.visit(tree)
33 return etree.tostring(self.root)
34 def generic_visit(self, node):
35 node_name = type(node).__name__
36 self.path.append(node_name)
37 ocelement = self.celement
38 self.celement = etree.SubElement(self.celement, node_name)
39 for item in node.__dict__:
40 if isinstance(getattr(node, item), ast.AST):
41 self.generic_visit(getattr(node, item))
42 elif isinstance(getattr(node, item), list):
43 ocel2 = self.celement
44 self.celement = etree.SubElement(self.celement, item)
45 [self.generic_visit(childnode) for childnode in getattr(node, item) if isinstance(childnode, (ast.AST, list))]
46 self.celement = ocel2
47 else:
48 self.celement.attrib.update({item: str(getattr(node, item))})
49 self.path.pop()
50 self.celement = ocelement
51
52def main(fpath):
53 with open(fpath, 'r') as f:

Callers 1

mainFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected