1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
7 from io import StringIO
21 def __init__(self, filename):
26 def dump(self, fname):
27 (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
28 f = os.fdopen(fdno, "w")
29 self.requests.reverse()
30 for r in self.requests:
32 self.requests.reverse()
36 os.chmod(tmpfname, 0o0644)
37 os.rename(tmpfname, fname)
39 def dump_html(self, fname):
40 (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
41 f = os.fdopen(fdno, "w")
45 <link rel="Shortcut Icon" href="//www.tld-linux.org/favicon.ico"/>
46 <title>TLD builder queue</title>
47 <link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="style.css">
48 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
49 <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.4.3/jquery.timeago.min.js"></script>
50 <script type="text/javascript" src="script.js"></script>
54 <div id="requesters-filter">Filter by requesters:<br></div>
59 self.requests.reverse()
60 for r in self.requests:
62 self.requests.reverse()
63 f.write("</div></body></html>\n")
67 os.chmod(tmpfname, 0o0644)
68 os.rename(tmpfname, fname)
70 # read possibly compressed, signed queue
71 def read_signed(self):
72 if re.search(r"\.gz$", self.name):
73 f = gzip.open(self.name)
76 (signers, body) = gpg.verify_sig(f.read())
77 self.signers = signers
78 self.requests = request.parse_requests(body)
82 if os.access(self.name, os.F_OK):
83 self.fd = open(self.name, "r+")
85 self.fd = open(self.name, "w+")
91 if body.strip() == "":
92 # empty file, don't choke
96 self.requests = request.parse_requests(body)
97 except Exception as e:
98 log.panic("error parsing %s: %s" % (self.name, e))
101 def _write_to(self, f):
103 for r in self.requests:
105 f.write("</queue>\n")
111 self._write_to(self.fd)
114 def lock(self, no_block):
118 op = op + fcntl.LOCK_NB
120 fcntl.flock(self.fd, op)
126 fcntl.flock(self.fd, fcntl.LOCK_UN)
128 def write_signed(self, name):
132 sio.write(util.to_str(gpg.sign(sio.read())))
134 (fdno, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
135 f = os.fdopen(fdno, "w")
136 util.sendfile(sio, f)
140 if re.search(r"\.gz$", name):
141 f_in = open(tmpname, 'rb')
142 f_out = gzip.open(name, 'wb')
143 shutil.copyfileobj(f_in, f_out)
146 os.fsync(f_out.fileno())
150 os.rename(tmpname, name)
151 os.chmod(name, 0o0644)
154 self.requests.append(req)