1 from xml.dom.minidom import *
4 import xml.sax.saxutils
6 __all__ = ['parse_request', 'parse_requests']
9 if len(e.childNodes) == 0:
11 elif len(e.childNodes) == 1:
13 if n.nodeType != Element.TEXT_NODE:
14 raise "xml: text expected: <%s>" % e.nodeName
17 raise "xml: text expected: <%s>" % e.nodeName
20 return e.attributes[a].value
23 return xml.sax.saxutils.escape(s)
26 return e.nodeType == Element.TEXT_NODE and string.strip(e.nodeValue) == ""
29 def __init__(self, e):
32 self.id = attr(e, "id")
33 self.no = int(attr(e, "no"))
35 self.time = time.time()
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))
50 raise "xml: evil group child (%s)" % c.nodeName
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:
59 def write_to(self, f):
61 <group id="%s" no="%d">
62 <requester>%s</requester>
64 <priority>%d</priority>\n""" % (self.id, self.no,
65 escape(self.requester), self.time, self.priority))
66 for b in self.batches:
68 f.write(" </group>\n\n")
71 def __init__(self, e):
73 self.bconds_without = []
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":
87 elif c.nodeName == "info":
89 elif c.nodeName == "branch":
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))
98 raise "xml: evil batch child (%s)" % c.nodeName
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)
107 def bconds_string(self):
109 for b in self.bconds_with:
110 r = r + " --with " + b
111 for b in self.bconds_without:
112 r = r + " --without " + b
115 def write_to(self, f):
118 <src-rpm>%s</src-rpm>
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")
131 def build_request(e):
132 if e.nodeType != Element.ELEMENT_NODE:
133 raise "xml: evil request element"
134 if e.nodeName == "group":
136 elif e.nodeName == "command":
140 raise "xml: evil request <%s>" % e.nodeName
142 def parse_request(f):
144 return build_request(d.documentElement)
146 def parse_requests(f):
149 for r in d.documentElement.childNodes:
150 if is_blank(r): continue
151 res.append(build_request(r))