summaryrefslogtreecommitdiff
path: root/import_tools/del_repo/repo_to_yaml.py
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)