[projects/pld-builder.new] - more python 3.x fixes, dropped python 2.x support

hawk hawk at pld-linux.org
Sun May 2 13:53:49 CEST 2021


commit 14edabbea8736bc0421d4bfeeda6bcca7501669c
Author: Marcin Krol <hawk at tld-linux.org>
Date:   Sun May 2 13:52:06 2021 +0200

    - more python 3.x fixes, dropped python 2.x support

 PLD_Builder/acl.py             |  5 +----
 PLD_Builder/bqueue.py          | 29 ++++++++++++++++-------------
 PLD_Builder/chroot.py          |  7 ++++---
 PLD_Builder/config.py          |  5 +----
 PLD_Builder/gpg.py             | 18 +++++++-----------
 PLD_Builder/install.py         |  6 +-----
 PLD_Builder/mailer.py          |  6 +-----
 PLD_Builder/notify.py          |  8 ++------
 PLD_Builder/pipeutil.py        |  5 +----
 PLD_Builder/request.py         | 12 ++++++------
 PLD_Builder/request_fetcher.py |  6 +-----
 PLD_Builder/request_handler.py |  5 -----
 PLD_Builder/rpm_builder.py     |  4 ++--
 PLD_Builder/srpm_builder.py    |  4 ----
 PLD_Builder/util.py            | 17 +++++++++++++++++
 PLD_Builder/wrap.py            |  5 +----
 16 files changed, 61 insertions(+), 81 deletions(-)
---
diff --git a/PLD_Builder/acl.py b/PLD_Builder/acl.py
index 0d45634..88ed536 100644
--- a/PLD_Builder/acl.py
+++ b/PLD_Builder/acl.py
@@ -1,10 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import sys
-if sys.version_info[0] == 2:
-    import ConfigParser
-else:
-    import configparser as ConfigParser
+import configparser as ConfigParser
 import string
 import fnmatch
 import os
diff --git a/PLD_Builder/bqueue.py b/PLD_Builder/bqueue.py
index aaa249c..4699fd7 100644
--- a/PLD_Builder/bqueue.py
+++ b/PLD_Builder/bqueue.py
@@ -4,14 +4,12 @@ import re
 import gzip
 import time
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
+from io import StringIO
 import os
 import fcntl
 import string
 import tempfile
+import shutil
 
 # PLD_Builder:
 import gpg
@@ -131,21 +129,26 @@ class B_Queue:
         sio = StringIO()
         self._write_to(sio)
         sio.seek(0)
-        sio.write(gpg.sign(sio.read()))
+        sio.write(util.to_str(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)
+        util.sendfile(sio, f)
         f.flush()
         os.fsync(f.fileno())
         f.close()
-        os.chmod(tmpname, 0o0644)
-        os.rename(tmpname, name)
+        if re.search(r"\.gz$", name):
+            f_in = open(tmpname, 'rb')
+            f_out = gzip.open(name, 'wb')
+            shutil.copyfileobj(f_in, f_out)
+            f_in.close();
+            f_out.flush();
+            os.fsync(f_out.fileno())
+            f_out.close();
+            os.remove(tmpname)
+        else:
+            os.rename(tmpname, name)
+        os.chmod(name, 0o0644)
 
     def add(self, req):
         self.requests.append(req)
diff --git a/PLD_Builder/chroot.py b/PLD_Builder/chroot.py
index f91e1c6..8acd58d 100644
--- a/PLD_Builder/chroot.py
+++ b/PLD_Builder/chroot.py
@@ -3,6 +3,7 @@
 import os
 import re
 import random
+import util
 
 try:
     from hashlib import md5 as md5
@@ -49,7 +50,7 @@ def run(cmd, user = "builder", logfile = None, logstdout = None):
 
 def cp(file, outfile, user="builder", rm=False):
     m = md5()
-    m.update(str(random.sample(range(100000), 500)).encode('utf-8'))
+    m.update(util.to_bytes(str(random.sample(range(100000), 500))))
     digest = m.hexdigest()
 
     marker_start = "--- FILE BEGIN DIGEST %s ---" % digest
@@ -70,11 +71,11 @@ def cp(file, outfile, user="builder", rm=False):
         me = l.find(marker_end)
         if me != -1:
             l = l[:me]
-            f.write(l)
+            f.write(util.to_bytes(l))
             marker = False
             break
         if marker:
-            f.write(l)
+            f.write(util.to_bytes(l))
     rp = p.close()
     rf = f.close()
     if rp == None:
diff --git a/PLD_Builder/config.py b/PLD_Builder/config.py
index a325762..d7bd958 100644
--- a/PLD_Builder/config.py
+++ b/PLD_Builder/config.py
@@ -1,10 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import sys
-if sys.version_info[0] == 2:
-    import ConfigParser
-else:
-    import configparser as ConfigParser
+import configparser as ConfigParser
 import string
 import os
 import syslog
diff --git a/PLD_Builder/gpg.py b/PLD_Builder/gpg.py
index b820dcd..942cfb5 100644
--- a/PLD_Builder/gpg.py
+++ b/PLD_Builder/gpg.py
@@ -4,11 +4,7 @@ import log
 import subprocess
 import re
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
-
+from io import StringIO
 import util
 import os
 import pipeutil
@@ -27,7 +23,7 @@ def get_keys(buf):
     cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
     gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
     try:
-        d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
+        d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
     except OSError as e:
         log.error("gnupg run, does gpg binary exist? : %s" % e)
         raise
@@ -35,7 +31,7 @@ def get_keys(buf):
     rx = re.compile("^gpg:.*using\s[DR]SA\skey\s(?:ID\s)?(\w+)")
     keys = []
 
-    for l in d_stderr.decode().split('\n'):
+    for l in util.to_str(d_stderr).split('\n'):
         m = rx.match(l)
         if m:
             keys.append(m.group(1))
@@ -59,14 +55,14 @@ def verify_sig(buf):
     cmd = ['/usr/bin/gpg', '--batch', '--no-tty', '--decrypt']
     gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
     try:
-        d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
+        d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
     except OSError as e:
         log.error("gnupg run failed, does gpg binary exist? : %s" % e)
         raise
 
     rx = re.compile("^gpg: (Good signature from|                aka) .*<([^>]+)>")
     emails = []
-    for l in d_stderr.decode().split('\n'):
+    for l in util.to_str(d_stderr).split('\n'):
         m = rx.match(l)
         if m:
             emails.append(m.group(2))
@@ -85,12 +81,12 @@ def sign(buf):
     # TODO: check for gpg return code!
     gpg_run = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
     try:
-        d_stdout, d_stderr = gpg_run.communicate(buf.decode().encode('utf-8'))
+        d_stdout, d_stderr = gpg_run.communicate(util.to_bytes(buf))
     except OSError as e:
         log.error("gnupg signing failed, does gpg binary exist? : %s" % e)
         raise
 
     if len(d_stderr):
-        log.error("gpg: %s" % d_stderr.decode())
+        log.error("gpg: %s" % util.to_str(d_stderr))
 
     return d_stdout
diff --git a/PLD_Builder/install.py b/PLD_Builder/install.py
index edb4ae9..3e11817 100644
--- a/PLD_Builder/install.py
+++ b/PLD_Builder/install.py
@@ -3,11 +3,7 @@
 import re, os
 import string
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
-
+from io import StringIO
 import chroot
 import util
 import log
diff --git a/PLD_Builder/mailer.py b/PLD_Builder/mailer.py
index b7d44ab..2cf324d 100644
--- a/PLD_Builder/mailer.py
+++ b/PLD_Builder/mailer.py
@@ -3,11 +3,7 @@
 import time
 import os
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
-
+from io import StringIO
 from config import config
 import util
 import log
diff --git a/PLD_Builder/notify.py b/PLD_Builder/notify.py
index e13c052..71b269c 100644
--- a/PLD_Builder/notify.py
+++ b/PLD_Builder/notify.py
@@ -1,11 +1,7 @@
 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
 
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
-
+from io import StringIO
 import mailer
 import gpg
 import util
@@ -22,7 +18,7 @@ class Notifier:
         sio = StringIO()
         self.xml.write("</notification>\n")
         self.xml.seek(0)
-        sio.write(gpg.sign(self.xml.read()))
+        sio.write(util.to_str(gpg.sign(self.xml.read())))
         self.xml = None
         sio.seek(0)
         notifyq.init(r)
diff --git a/PLD_Builder/pipeutil.py b/PLD_Builder/pipeutil.py
index a3e78c9..fb6434c 100644
--- a/PLD_Builder/pipeutil.py
+++ b/PLD_Builder/pipeutil.py
@@ -3,10 +3,7 @@
 import select
 import os
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
+from io import StringIO
 
 def rw_pipe(buf_, infd, outfd):
     buf = StringIO()
diff --git a/PLD_Builder/request.py b/PLD_Builder/request.py
index 6c81575..71a422c 100644
--- a/PLD_Builder/request.py
+++ b/PLD_Builder/request.py
@@ -8,7 +8,7 @@ import xml.sax.saxutils
 import fnmatch
 import os
 import urllib
-import cgi
+import html
 import pytz
 import tempfile
 
@@ -329,9 +329,9 @@ class Batch:
             desc = "SH: <pre>%s</pre> flags: [%s]" % (self.command, ' '.join(self.command_flags))
         else:
             package_url = "http://git.pld-linux.org/gitweb.cgi?p=packages/%(package)s.git;f=%(spec)s;h=%(branch)s;a=shortlog" % {
-                'spec': urllib.quote(self.spec),
-                'branch': urllib.quote(self.branch),
-                'package': urllib.quote(self.spec[:-5]),
+                'spec': urllib.parse.quote(self.spec),
+                'branch': urllib.parse.quote(self.branch),
+                'package': urllib.parse.quote(self.spec[:-5]),
             }
             desc = "%(src_rpm)s (<a href=\"%(package_url)s\">%(spec)s -r %(branch)s</a>%(rpmopts)s)" % {
                 'src_rpm': self.src_rpm,
@@ -370,7 +370,7 @@ class Batch:
                 tree_name = '-'.join(bld[:-1])
                 tree_arch = '-'.join(bld[-1:])
                 link_pre = "<a href=\"%s/index.php?dist=%s&arch=%s&ok=%d&name=%s&id=%s&action=tail\">" \
-                    % (config.buildlogs, urllib.quote(tree_name), urllib.quote(tree_arch), is_ok, urllib.quote(bl_name), urllib.quote(rid))
+                    % (config.buildlogs, urllib.parse.quote(tree_name), urllib.parse.quote(tree_arch), is_ok, urllib.parse.quote(bl_name), urllib.parse.quote(rid))
                 link_post = "</a>"
 
             def ftime(s):
@@ -389,7 +389,7 @@ class Batch:
                     'color' : c,
                     'builder' : b,
                     'status' : s,
-                    'tooltip' : cgi.escape(tooltip, True),
+                    'tooltip' : html.escape(tooltip, True),
             }
             + link_post)
         f.write("%s]</small></li>\n" % ' '.join(builders))
diff --git a/PLD_Builder/request_fetcher.py b/PLD_Builder/request_fetcher.py
index fc9f49d..25b130f 100644
--- a/PLD_Builder/request_fetcher.py
+++ b/PLD_Builder/request_fetcher.py
@@ -6,12 +6,8 @@ import os
 import urllib
 import urllib2
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
+from io import StringIO
 import gzip
-
 import path
 import log
 import status
diff --git a/PLD_Builder/request_handler.py b/PLD_Builder/request_handler.py
index de48d9e..70a1866 100644
--- a/PLD_Builder/request_handler.py
+++ b/PLD_Builder/request_handler.py
@@ -5,12 +5,7 @@ import string
 import time
 import os
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
 import fnmatch
-
 import gpg
 import request
 import log
diff --git a/PLD_Builder/rpm_builder.py b/PLD_Builder/rpm_builder.py
index 0126161..1f1ed2c 100644
--- a/PLD_Builder/rpm_builder.py
+++ b/PLD_Builder/rpm_builder.py
@@ -85,7 +85,7 @@ def check_skip_build(r, b):
     return False
 
 def fetch_src(r, b):
-    src_url = config.control_url + "/srpms/" + r.id + "/" + urllib.quote(b.src_rpm)
+    src_url = config.control_url + "/srpms/" + r.id + "/" + urllib.parse.quote(b.src_rpm)
     b.log_line("fetching %s" % src_url)
     start = time.time()
     good = False
@@ -126,7 +126,7 @@ def fetch_src(r, b):
                     print("error.reason exception %s" % e)
                 raise
 
-    o = chroot.popen("cat > %s" % b.src_rpm, mode = "w")
+    o = chroot.popen("cat > %s" % b.src_rpm, mode = "wb")
 
     try:
         bytes = util.sendfile(f, o)
diff --git a/PLD_Builder/srpm_builder.py b/PLD_Builder/srpm_builder.py
index bee5f98..562b0c5 100644
--- a/PLD_Builder/srpm_builder.py
+++ b/PLD_Builder/srpm_builder.py
@@ -5,10 +5,6 @@ import string
 import time
 import os
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
 import re
 import shutil
 import atexit
diff --git a/PLD_Builder/util.py b/PLD_Builder/util.py
index 05cf076..1d485a1 100644
--- a/PLD_Builder/util.py
+++ b/PLD_Builder/util.py
@@ -5,6 +5,7 @@ import sys
 import os
 import log
 import string
+import codecs
 
 def uuid_python():
     return str(uuid_random())
@@ -95,3 +96,19 @@ def cmp_to_key(mycmp):
         def __ne__(self, other):
             return mycmp(self.obj, other.obj) != 0
     return K
+
+def to_bytes(s):
+    if type(s) is bytes:
+        return s
+    elif type(s) is str or (sys.version_info[0] < 3 and type(s) is unicode):
+        return codecs.encode(s, 'utf-8')
+    else:
+        raise TypeError("Expected bytes or string, but got %s." % type(s))
+
+def to_str(s):
+    if type(s) is bytes:
+        return codecs.decode(s, 'utf-8')
+    elif type(s) is str or (sys.version_info[0] < 3 and type(s) is unicode):
+        return s
+    else:
+        raise TypeError("Expected bytes or string, but got %s." % type(s))
diff --git a/PLD_Builder/wrap.py b/PLD_Builder/wrap.py
index e343e16..11892ee 100644
--- a/PLD_Builder/wrap.py
+++ b/PLD_Builder/wrap.py
@@ -4,10 +4,7 @@ import sys
 import log
 import traceback
 import sys
-if sys.version_info[0] == 2:
-    import StringIO
-else:
-    from io import StringIO
+from io import StringIO
 import os
 import time
 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/pld-builder.new.git/commitdiff/14edabbea8736bc0421d4bfeeda6bcca7501669c



More information about the pld-cvs-commit mailing list