5
from xml.dom import minidom
7
from optparse import OptionParser
10
def print_line(key, value):
11
print "%s: %s" % (key, value)
13
def print_element(element):
14
for key, value in element.items():
15
print_line(key, value)
21
default_status = "pass"
22
tree = minidom.parse(file)
23
for suite in tree.getElementsByTagName("suite"):
25
element["plugin"] = "local"
26
element["status"] = default_status
27
element["name"] = suite.getAttribute("name")
28
for child in suite.childNodes:
29
if child.nodeName == "description":
30
element["description"] = child.firstChild.data.strip()
31
elif child.nodeName == "result":
32
for subchild in child.childNodes:
33
if subchild.nodeName == "pass":
34
data = subchild.firstChild.data
35
element["status"] = data == "1" and "pass" or "fail"
36
elif subchild.nodeName == "error":
37
element["status"] = "fail"
39
if element["status"] == "fail":
40
default_status = "unresolved"
42
elements.append(element)
44
for case in suite.getElementsByTagName("case"):
46
element["plugin"] = "shell"
47
element["status"] = default_status
48
element["suite"] = suite.getAttribute("name")
49
element["name"] = case.getAttribute("name")
50
for child in case.childNodes:
51
if child.nodeName == "description":
52
element["description"] = child.firstChild.data.strip()
53
elif child.nodeName == "result":
54
for subchild in child.childNodes:
55
if subchild.nodeName == "time":
56
data = subchild.firstChild.data
57
element["duration"] = float(data)
58
elif subchild.nodeName == "message":
59
element["data"] = subchild.firstChild.data
60
elif subchild.nodeName == "pass":
61
data = subchild.firstChild.data
62
element["status"] = data == "1" and "pass" or "fail"
63
elif subchild.nodeName == "error":
64
element["status"] = "fail"
66
elements.append(element)
70
def parse_files(files):
73
elements.extend(parse_file(file))
78
usage = "Usage: %prog [FILE...]"
79
parser = OptionParser(usage=usage)
80
(options, args) = parser.parse_args(args)
87
elements = parse_files(files)
91
for element in elements:
92
print_element(element)
97
if __name__ == "__main__":
98
sys.exit(main(sys.argv[1:]))