1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
7 if sys.version_info[0] == 2:
10 from io import StringIO
23 def __init__(self, filename):
28 def dump(self, fname):
29 (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
30 f = os.fdopen(fdno, "w")
31 self.requests.reverse()
32 for r in self.requests:
34 self.requests.reverse()
38 os.chmod(tmpfname, 0644)
39 os.rename(tmpfname, fname)
41 def dump_html(self, fname):
42 (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
43 f = os.fdopen(fdno, "w")
47 <link rel="Shortcut Icon" href="//www.tld-linux.org/favicon.ico"/>
48 <title>TLD builder queue</title>
49 <link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="style.css">
50 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
51 <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.4.3/jquery.timeago.min.js"></script>
52 <script type="text/javascript" src="script.js"></script>
56 <div id="requesters-filter">Filter by requesters:<br></div>
61 self.requests.reverse()
62 for r in self.requests:
64 self.requests.reverse()
65 f.write("</div></body></html>\n")
69 os.chmod(tmpfname, 0644)
70 os.rename(tmpfname, fname)
72 # read possibly compressed, signed queue
73 def read_signed(self):
74 if re.search(r"\.gz$", self.name):
75 f = gzip.open(self.name)
78 (signers, body) = gpg.verify_sig(f.read())
79 self.signers = signers
80 self.requests = request.parse_requests(body)
84 if os.access(self.name, os.F_OK):
85 self.fd = open(self.name, "r+")
87 self.fd = open(self.name, "w+")
93 if string.strip(body) == "":
94 # empty file, don't choke
98 self.requests = request.parse_requests(body)
99 except Exception as e:
100 log.panic("error parsing %s: %s" % (self.name, e))
103 def _write_to(self, f):
105 for r in self.requests:
107 f.write("</queue>\n")
113 self._write_to(self.fd)
116 def lock(self, no_block):
120 op = op + fcntl.LOCK_NB
122 fcntl.flock(self.fd, op)
128 fcntl.flock(self.fd, fcntl.LOCK_UN)
130 def write_signed(self, name):
131 sio = StringIO.StringIO()
134 sio.write(gpg.sign(sio.read()))
136 (fdno, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
137 f = os.fdopen(fdno, "w")
138 if re.search(r"\.gz$", name):
139 fgz = gzip.GzipFile(filename=name, mode="w", compresslevel=6, fileobj=f)
140 util.sendfile(sio, fgz)
143 util.sendfile(sio, f)
147 os.chmod(tmpname, 0644)
148 os.rename(tmpname, name)
151 self.requests.append(req)