]> git.pld-linux.org Git - projects/pld-builder.new.git/blob - PLD_Builder/request.py
7c6487e3c456d4b2fc8aa71d095f1cc574f22838
[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 "    with: %s" % string.join(self.bconds_with)
105     print "    without: %s" % string.join(self.bconds_without)
106     print "    for: %s" % string.join(self.builders)
107
108   def write_to(self, f):
109     f.write("""
110          <batch>
111            <src-rpm>%s</src-rpm>
112            <spec>%s</spec>
113            <branch>%s</branch>
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")
123
124 def build_request(e):
125   if e.nodeType != Element.ELEMENT_NODE:
126     raise "xml: evil request element"
127   if e.nodeName == "group":
128     return Group(e)
129   elif e.nodeName == "command":
130     # FIXME
131     return Command(e)
132   else:
133     raise "xml: evil request <%s>" % e.nodeName
134
135 def parse_request(f):
136   d = parse(f)
137   return build_request(d.documentElement)
138   
139 def parse_requests(f):
140   d = parse(f)
141   res = []
142   for r in d.documentElement.childNodes:
143     if is_blank(r): continue
144     res.append(build_request(r))
145   return res
This page took 0.030279 seconds and 2 git commands to generate.