import re
import gzip
import time
-import StringIO
+import sys
+if sys.version_info[0] == 2:
+ import StringIO
+else:
+ from io import StringIO
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):
+ (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
+ f = os.fdopen(fdno, "w")
self.requests.reverse()
for r in self.requests:
r.dump(f)
self.requests.reverse()
-
- def dump_html(self, f):
+ f.flush()
+ os.fsync(f.fileno())
+ f.close()
+ os.chmod(tmpfname, 0644)
+ os.rename(tmpfname, fname)
+
+ def dump_html(self, fname):
+ (fdno, tmpfname) = tempfile.mkstemp(dir=os.path.dirname(fname))
+ f = os.fdopen(fdno, "w")
f.write("""
<html>
<head>
- <link rel="Shortcut Icon" href="http://www.pld-linux.org/favicon.ico"/>
+ <link rel="Shortcut Icon" href="//www.pld-linux.org/favicon.ico"/>
<title>PLD builder queue</title>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="style.css">
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.4.3/jquery.timeago.min.js"></script>
+ <script type="text/javascript" src="script.js"></script>
</head>
-<body>\n"""
+<body>
+<div id="header">
+ <div id="requesters-filter">Filter by requesters:<br></div>
+</div>
+<div id="content">
+"""
)
self.requests.reverse()
for r in self.requests:
r.dump_html(f)
self.requests.reverse()
- f.write("</body></html>\n")
-
+ f.write("</div></body></html>\n")
+ f.flush()
+ os.fsync(f.fileno())
+ f.close()
+ os.chmod(tmpfname, 0644)
+ os.rename(tmpfname, fname)
+
# read possibly compressed, signed queue
def read_signed(self):
if re.search(r"\.gz$", self.name):
self.fd = open(self.name, "r+")
else:
self.fd = open(self.name, "w+")
-
+
def read(self):
self._open()
self.signers = []
return
try:
self.requests = request.parse_requests(body)
- except Exception, e:
+ except Exception as e:
log.panic("error parsing %s: %s" % (self.name, e))
pass
return 1
except IOError:
return 0
-
+
def unlock(self):
fcntl.flock(self.fd, fcntl.LOCK_UN)
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)
+ (fdno, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
+ f = os.fdopen(fdno, "w")
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(tmpname, name)
def add(self, req):
self.requests.append(req)