import os
import fcntl
import string
+import tempfile
# PLD_Builder:
import gpg
self.requests = []
self.fd = None
- def dump(self, f):
+ def dump(self, fname):
+ (f, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
+ self.dump_fobj(f)
+ f.flush()
+ os.fsync(f.fileno())
+ f.close()
+ os.chmod(tmpfname, 0644)
+ os.rename(tmpfname, fname)
+
+ def dump_fobj(self, f):
self.requests.reverse()
for r in self.requests:
- r.dump(f)
+ r.dump_fobj(f)
self.requests.reverse()
- def dump_html(self, f):
+ def dump_html(self, fname):
+ (f, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
+ self.dump_html_fobj(f)
+ f.flush()
+ os.fsync(f.fileno())
+ f.close()
+ os.chmod(tmpfname, 0644)
+ os.rename(tmpfname, fname)
+
+ def dump_html_fobj(self, f):
f.write("""
<html>
<head>
)
self.requests.reverse()
for r in self.requests:
- r.dump_html(f)
+ r.dump_html_fobj(f)
self.requests.reverse()
f.write("</body></html>\n")
self._write_to(sio)
sio.seek(0)
sio.write(gpg.sign(sio.read()))
- if os.access(name, os.F_OK): os.unlink(name)
+ sio.seek(0)
+ (f, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
if re.search(r"\.gz$", name):
- f = gzip.open(name, "w", 6)
+ fgz = gzip.GzipFile(filename=name, mode="w", compresslevel=6, fileobj=f)
+ util.sendfile(sio, fgz)
+ fgz.close()
else:
- f = open(name, "w")
- sio.seek(0)
- util.sendfile(sio, f)
+ util.sendfile(sio, f)
+ f.flush()
+ os.fsync(f.fileno())
f.close()
+ os.chmod(tmpname, 0644)
+ os.rename(tmpfname, name)
def add(self, req):
self.requests.append(req)
return True
q.requests = filter(leave_it, q.requests)
q.write()
- q.dump(open(path.queue_stats_file, "w"))
- q.dump_html(open(path.queue_html_stats_file, "w"))
- os.chmod(path.queue_html_stats_file, 0644)
- os.chmod(path.queue_stats_file, 0644)
+ q.dump(path.queue_stats_file)
+ q.dump_html(path.queue_html_stats_file)
q.write_signed(path.req_queue_signed_file)
- os.chmod(path.req_queue_signed_file, 0644)
q.unlock()
def handle_request(req, filename = None):
q.read()
q.add(r)
q.write()
- q.dump(open(path.queue_stats_file, "w"))
- q.dump_html(open(path.queue_html_stats_file, "w"))
- os.chmod(path.queue_stats_file, 0644)
- os.chmod(path.queue_html_stats_file, 0644)
+ q.dump(path.queue_stats_file)
+ q.dump_html(path.queue_html_stats_file)
q.write_signed(path.req_queue_signed_file)
- os.chmod(path.req_queue_signed_file, 0644)
q.unlock()
cnt_f.seek(0)
cnt_f.write("%d\n" % num)