sa/ma credentials include the rights authority+sa or authority+ma, authorities includ...
[sfa.git] / rspec / testparse.py
1 """Read in a DOM instance, convert it to a Python object
2 """
3 from xml.dom.utils import FileReader
4
5 class PyObject: pass
6
7 def pyobj_printer(py_obj, level=0):
8     """Return a "deep" string description of a Python object"""
9     from string import join, split
10     import types
11     descript = ''
12     for membname in dir(py_obj):
13         member = getattr(py_obj,membname)
14         if type(member) == types.InstanceType:
15             descript = descript + (' '*level) + '{'+membname+'}\n'
16             descript = descript + pyobj_printer(member, level+3)
17         elif type(member) == types.ListType:
18             descript = descript + (' '*level) + '['+membname+']\n'
19             for i in range(len(member)):
20                 descript = descript+(' '*level)+str(i+1)+': '+ \
21                            pyobj_printer(member[i],level+3)
22         else:
23             descript = descript + membname+'='
24             descript = descript + join(split(str(member)[:50]))+'...\n'
25     return descript
26
27 def pyobj_from_dom(dom_node):
28     """Converts a DOM tree to a "native" Python object"""
29     py_obj = PyObject()
30     py_obj.PCDATA = ''
31     for node in dom_node.get_childNodes():
32         if node.name == '#text':
33             py_obj.PCDATA = py_obj.PCDATA + node.value
34         elif hasattr(py_obj, node.name):
35             getattr(py_obj, node.name).append(pyobj_from_dom(node))
36         else:
37             setattr(py_obj, node.name, [pyobj_from_dom(node)])
38     return py_obj
39
40 # Main test
41 dom_obj = FileReader("sample_rspec.xml").document
42 py_obj = pyobj_from_dom(dom_obj)
43 if __name__ == "__main__":
44     print pyobj_printer(py_obj)