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 " with: %s" % string.join(self.bconds_with)
105 print " without: %s" % string.join(self.bconds_without)
106 print " for: %s" % string.join(self.builders)
108 def write_to(self, f):
111 <src-rpm>%s</src-rpm>
114 <info>%s</info>\n""" % (escape(self.src_rpm),
115 escape(self.spec), escape(self.branch), escape(self.info)))
116 for b in self.bconds_with:
117 f.write(" <with>%s</with>\n" % escape(b))
118 for b in self.bconds_without:
119 f.write(" <without>%s</without>\n" % escape(b))
120 for b in self.builders:
121 f.write(" <builder>%s</builder>\n" % escape(b))
122 f.write(" </batch>\n")
124 def build_request(e):
125 if e.nodeType != Element.ELEMENT_NODE:
126 raise "xml: evil request element"
127 if e.nodeName == "group":
129 elif e.nodeName == "command":
133 raise "xml: evil request <%s>" % e.nodeName
135 def parse_request(f):
137 return build_request(d.documentElement)
139 def parse_requests(f):
142 for r in d.documentElement.childNodes:
143 if is_blank(r): continue
144 res.append(build_request(r))