blob: 2348e571072b95809d8d3f5e2e44da9e0fe22402 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/python
#python repo-to-yaml.py roomba.repo.xml > roomba.yaml
import sys, os
import yaml
import optfunc
from xml.dom import minidom
def determine_key_name(results, node_name):
'''from a node_name, figure out a unique key name'''
if node_name == "#text": return False #return determine_key_name(results, "no name error")
key_name = node_name
if not results.has_key(key_name):
return key_name
n = 0
while True:
if n>5000:
raise OverflowError, "recursion depth exceeded"
return False
if not results.has_key(key_name):
return key_name
key_name = node_name + " " + str(n)
n=n+1
def process_node(node):
results = {}
if node.nodeName == "#text": return results
if node.attributes:
for attr_key in node.attributes.keys():
value = node.attributes[attr_key].value
key_name = determine_key_name(results, attr_key)
if not key_name==False and not key_name=="False":
results[str(unicode(key_name))] = str(unicode(value))
#print "results[%s] = %s" % (key_name, value)
for child_node in node.childNodes:
result = process_node(child_node)
key_name = determine_key_name(results, child_node.nodeName)
if not key_name==False and not key_name == "False":
results[str(unicode(key_name))] = result
return results
def parse_file(file):
artifacts = []
doc = minidom.parse(file)
system = doc
#system = doc.childNodes[0]
#print system.childNodes[0].nodeName=="#text"
huge_thing = process_node(system)
return huge_thing
#for node in system.childNodes:
# if node.nodeName == "Artifact":
# artifact = process_artifact(node)
# artifacts.append(artifact)
def parse_repo(repo):
system = repo.childNodes[0].nextSibling.childNodes[1]
huge_thing = process_node(system)
return huge_thing
def main():
rval = {}
if len(sys.argv)>1 and sys.argv[1] == '-':
rval['stdin'] = parse_file(sys.stdin)
else:
for i in sys.argv[1:]:
rval[i] = parse_file(open(i))
print yaml.dump(rval, default_flow_style=False)
return rval
def repo_to_yaml(repo):
repo_path = os.path.abspath(repo)
return yaml.dump(parse_file(repo_path))
if __name__ == "__main__":
optfunc.run(repo_to_yaml)
|