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">
53 self.requests.reverse()
54 for r in self.requests:
56 self.requests.reverse()
57 f.write("</div></body></html>\n")
61 os.chmod(tmpfname, 0o0644)
62 os.rename(tmpfname, fname)
64 # read possibly compressed, signed queue
65 def read_signed(self):
66 if re.search(r"\.gz$", self.name):
67 f = gzip.open(self.name)
70 (signers, body) = gpg.verify_sig(f.read())
71 self.signers = signers
72 self.requests = request.parse_requests(body)
76 if os.access(self.name, os.F_OK):
77 self.fd = open(self.name, "r+")
79 self.fd = open(self.name, "w+")
85 if body.strip() == "":
86 # empty file, don't choke
90 self.requests = request.parse_requests(body)
91 except Exception as e:
92 log.panic("error parsing %s: %s" % (self.name, e))
95 def _write_to(self, f):
97 for r in self.requests:
105 self._write_to(self.fd)
108 def lock(self, no_block):
112 op = op + fcntl.LOCK_NB
114 fcntl.flock(self.fd, op)
120 fcntl.flock(self.fd, fcntl.LOCK_UN)
122 def write_signed(self, name):
126 sio.write(util.to_str(gpg.sign(sio.read())))
128 (fdno, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
129 f = os.fdopen(fdno, "w")
130 shutil.copyfileobj(sio, f)
134 if re.search(r"\.gz$", name):
135 f_in = open(tmpname, 'rb')
136 f_out = gzip.open(name, 'wb')
137 shutil.copyfileobj(f_in, f_out)
140 os.fsync(f_out.fileno())
144 os.rename(tmpname, name)
145 os.chmod(name, 0o0644)
148 self.requests.append(req)