]> git.pld-linux.org Git - projects/pld-builder.new.git/blob - PLD_Builder/request.py
- work in progress...; sleep
[projects/pld-builder.new.git] / PLD_Builder / request.py
1 from xml.dom.minidom import *
2 import string
3 import time
4 import xml.sax.saxutils 
5
6 __all__ = ['parse_request', 'parse_requests']
7   
8 def text(e):
9   if len(e.childNodes) == 0:
10     return ""
11   elif len(e.childNodes) == 1:
12     n = e.childNodes[0]
13     if n.nodeType != Element.TEXT_NODE:
14       raise "xml: text expected: <%s>" % e.nodeName
15     return n.nodeValue
16   else:
17     raise "xml: text expected: <%s>" % e.nodeName
18
19 def attr(e, a):
20   return e.attributes[a].value
21
22 def escape(s):
23   return xml.sax.saxutils.escape(s)
24
25 def is_blank(e):
26   return e.nodeType == Element.TEXT_NODE and string.strip(e.nodeValue) == ""
27   
28 class Group:
29   def __init__(self, e):
30     self.batches = []
31     self.kind = 'group'
32     self.id = attr(e, "id")
33     self.no = int(attr(e, "no"))
34     self.priority = 2
35     self.time = time.time()
36     self.requester = ""
37     for c in e.childNodes:
38       if is_blank(c): continue
39       if c.nodeType != Element.ELEMENT_NODE:
40         raise "xml: evil group child %d" % c.nodeType
41       if c.nodeName == "batch":
42         self.batches.append(Batch(c))
43       elif c.nodeName == "requester":
44         self.requester = text(c)
45       elif c.nodeName == "priority":
46         self.priority = int(text(c))
47       elif c.nodeName == "time":
48         self.time = int(text(c))
49       else:
50         raise "xml: evil group child (%s)" % c.nodeName
51
52   def dump(self):
53     print "group: %s @%d" % (self.id, self.priority)
54     print "  from: %s" % self.requester
55     print "  time: %s" % time.asctime(time.localtime(self.time))
56     for b in self.batches:
57       b.dump()
58
59   def write_to(self, f):
60     f.write("""
61        <group id="%s" no="%d">
62          <requester>%s</requester>
63          <time>%d</time>
64          <priority>%d</priority>\n""" % (self.id, self.no, 
65                 escape(self.requester), self.time, self.priority))
66     for b in self.batches:
67       b.write_to(f)
68     f.write("       </group>\n\n")
69
70 class Batch:
71   def __init__(self, e):
72     self.bconds_with = []
73     self.bconds_without = []
74     self.builders = []
75     self.branch = ""
76     self.src_rpm = ""
77     self.info = ""
78     self.spec = ""
79     for c in e.childNodes:
80       if is_blank(c): continue
81       if c.nodeType != Element.ELEMENT_NODE:
82         raise "xml: evil batch child %d" % c.nodeType
83       if c.nodeName == "src-rpm":
84         self.src_rpm = text(c)
85       elif c.nodeName == "spec":
86         self.spec = text(c)
87       elif c.nodeName == "info":
88         self.info = text(c)
89       elif c.nodeName == "branch":
90         self.branch = text(c)
91       elif c.nodeName == "builder":
92         self.builders.append(text(c))
93       elif c.nodeName == "with":
94         self.bconds_with.append(text(c))
95       elif c.nodeName == "without":
96         self.bconds_without.append(text(c))
97       else:
98         raise "xml: evil batch child (%s)" % c.nodeName
99   
100   def dump(self):
101     print "  batch: %s/%s" % (self.src_rpm, self.spec)
102     print "    info: %s" % self.info
103     print "    branch: %s" % self.branch
104     print "    bconds: %s" % self.bconds_string()
105     print "    for: %s" % string.join(self.builders)
106
107   def bconds_string(self):
108     r = ""
109     for b in self.bconds_with:
110       r = r + " --with " + b
111     for b in self.bconds_without:
112       r = r + " --without " + b
113     return r
114     
115   def write_to(self, f):
116     f.write("""
117          <batch>
118            <src-rpm>%s</src-rpm>
119            <spec>%s</spec>
120            <branch>%s</branch>
121            <info>%s</info>\n""" % (escape(self.src_rpm), 
122              escape(self.spec), escape(self.branch), escape(self.info)))
123     for b in self.bconds_with:
124       f.write("           <with>%s</with>\n" % escape(b))
125     for b in self.bconds_without:
126       f.write("           <without>%s</without>\n" % escape(b))
127     for b in self.builders:
128       f.write("           <builder>%s</builder>\n" % escape(b))
129     f.write("         </batch>\n")
130
131 def build_request(e):
132   if e.nodeType != Element.ELEMENT_NODE:
133     raise "xml: evil request element"
134   if e.nodeName == "group":
135     return Group(e)
136   elif e.nodeName == "command":
137     # FIXME
138     return Command(e)
139   else:
140     raise "xml: evil request <%s>" % e.nodeName
141
142 def parse_request(f):
143   d = parse(f)
144   return build_request(d.documentElement)
145   
146 def parse_requests(f):
147   d = parse(f)
148   res = []
149   for r in d.documentElement.childNodes:
150     if is_blank(r): continue
151     res.append(build_request(r))
152   return res
This page took 0.036788 seconds and 3 git commands to generate.