]> git.pld-linux.org Git - projects/pld-builder.new.git/blobdiff - PLD_Builder/bqueue.py
Fix outdated syntax
[projects/pld-builder.new.git] / PLD_Builder / bqueue.py
index 99f099ca246ab79e92a72f8b76f0b75f7a056db4..395e32fa7e0e10d44ee4da1d1e0092f91731038d 100644 (file)
+# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
+
 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
 import request
 import util
+import log
 
 class B_Queue:
-  def __init__(self, filename):
-    self.name = filename
-    self.requests = []
-    self.fd = None
+    def __init__(self, filename):
+        self.name = filename
+        self.requests = []
+        self.fd = None
+
+    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()
+        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="//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>
+<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("</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):
+            f = gzip.open(self.name)
+        else:
+            f = open(self.name)
+        (signers, body) = gpg.verify_sig(f.read())
+        self.signers = signers
+        self.requests = request.parse_requests(body)
+
+    def _open(self):
+        if self.fd == None:
+            if os.access(self.name, os.F_OK):
+                self.fd = open(self.name, "r+")
+            else:
+                self.fd = open(self.name, "w+")
 
-  def dump(self, f):
-    for r in self.requests:
-      r.dump(f)
-  
-  # read possibly compressed, signed queue
-  def read_signed(self):
-    if re.search(r"\.gz$", self.name):
-      f = gzip.open(self.name)
-    else:
-      f = open(self.name)
-    (signers, body) = gpg.verify_sig(f)
-    self.signers = signers
-    self.requests = request.parse_requests(body)
+    def read(self):
+        self._open()
+        self.signers = []
+        body = self.fd.read()
+        if string.strip(body) == "":
+            # empty file, don't choke
+            self.requests = []
+            return
+        try:
+            self.requests = request.parse_requests(body)
+        except Exception as e:
+            log.panic("error parsing %s: %s" % (self.name, e))
+            pass
 
-  def _open(self):
-    if self.fd == None:
-      if os.access(self.name, os.F_OK):
-        self.fd = open(self.name, "r+")
-      else:
-        self.fd = open(self.name, "w+")
-    
-  def read(self):
-    self._open()
-    self.signers = []
-    self.requests = request.parse_requests(self.fd)
+    def _write_to(self, f):
+        f.write("<queue>\n")
+        for r in self.requests:
+            r.write_to(f)
+        f.write("</queue>\n")
 
-  def _write_to(self, f):
-    f.write("<queue>\n")
-    for r in self.requests:
-      r.write_to(f)
-    f.write("</queue>\n")
+    def write(self):
+        self._open()
+        self.fd.seek(0)
+        self.fd.truncate(0)
+        self._write_to(self.fd)
+        self.fd.flush()
 
-  def write(self):
-    self._open()
-    self.fd.seek(0)
-    self.fd.truncate(0)
-    self._write_to(self.fd)
+    def lock(self, no_block):
+        self._open()
+        op = fcntl.LOCK_EX
+        if no_block:
+            op = op + fcntl.LOCK_NB
+        try:
+            fcntl.flock(self.fd, op)
+            return 1
+        except IOError:
+            return 0
 
-  def lock(self, no_block):
-    self._open()
-    op = fcntl.LOCK_EX
-    if no_block:
-      op = op + fcntl.LOCK_NB
-    try:
-      fcntl.flock(self.fd, op)
-      return 1
-    except IOError:
-      return 0
-  
-  def unlock(self):
-    fcntl.flock(self.fd, fcntl.LOCK_UN)
+    def unlock(self):
+        fcntl.flock(self.fd, fcntl.LOCK_UN)
 
-  def write_signed(self, name):
-    sio = StringIO.StringIO()
-    self._write_to(sio)
-    sio.seek(0)
-    sio = gpg.sign(sio)
-    if os.access(name, os.F_OK): os.unlink(name)
-    if re.search(r"\.gz$", name):
-      f = gzip.open(name, "w", 6)
-    else:
-      f = open(name, "w")
-    util.sendfile(sio, f)
-    f.close()
+    def write_signed(self, name):
+        sio = StringIO.StringIO()
+        self._write_to(sio)
+        sio.seek(0)
+        sio.write(gpg.sign(sio.read()))
+        sio.seek(0)
+        (fdno, tmpname) = tempfile.mkstemp(dir=os.path.dirname(name))
+        f = os.fdopen(fdno, "w")
+        if re.search(r"\.gz$", name):
+            fgz = gzip.GzipFile(filename=name, mode="w", compresslevel=6, fileobj=f)
+            util.sendfile(sio, fgz)
+            fgz.close()
+        else:
+            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)
+    def add(self, req):
+        self.requests.append(req)
 
-  def value(self):
-    return self.requests
+    def value(self):
+        return self.requests
This page took 0.311994 seconds and 4 git commands to generate.