Closes: https://github.com/gentoo/portage/pull/575
Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 lib/portage/cache/anydbm.py                   |  4 +-
 lib/portage/cache/mappings.py                 | 45 +++++-----------
 lib/portage/cache/sql_template.py             |  5 +-
 lib/portage/cache/template.py                 | 12 ++---
 lib/portage/elog/messages.py                  |  3 +-
 lib/portage/output.py                         |  3 +-
 lib/portage/package/ebuild/config.py          | 11 +---
 .../futures/asyncio/test_subprocess_exec.py   |  4 --
 lib/portage/tests/util/futures/test_retry.py  |  2 -
 lib/portage/tests/util/test_socks5.py         | 16 ++----
 lib/portage/util/__init__.py                  | 53 +++++--------------
 lib/portage/util/_dyn_libs/NeededEntry.py     | 10 ----
 lib/portage/util/digraph.py                   |  3 --
 lib/portage/util/listdir.py                   |  2 -
 lib/portage/util/whirlpool.py                 | 25 ++++-----
 lib/portage/xpak.py                           |  2 -
 16 files changed, 52 insertions(+), 148 deletions(-)

diff --git a/lib/portage/cache/anydbm.py b/lib/portage/cache/anydbm.py
index 88d85b0da..121a4eaf2 100644
--- a/lib/portage/cache/anydbm.py
+++ b/lib/portage/cache/anydbm.py
@@ -112,5 +112,5 @@ class database(fs_template.FsBased):
                        self.__db.sync()
                        self.__db.close()
 
-       if sys.hexversion >= 0x3000000:
-               items = iteritems
+       # TODO: do we need iteritems()?
+       items = iteritems
diff --git a/lib/portage/cache/mappings.py b/lib/portage/cache/mappings.py
index 0432fdf60..0adecde4a 100644
--- a/lib/portage/cache/mappings.py
+++ b/lib/portage/cache/mappings.py
@@ -25,9 +25,6 @@ class Mapping(object):
        def __iter__(self):
                return iter(self.keys())
 
-       def keys(self):
-               return list(self.__iter__())
-
        def __contains__(self, key):
                try:
                        value = self[key]
@@ -46,12 +43,6 @@ class Mapping(object):
                for _, v in self.items():
                        yield v
 
-       def values(self):
-               return [v for _, v in self.iteritems()]
-
-       def items(self):
-               return list(self.iteritems())
-
        def get(self, key, default=None):
                try:
                        return self[key]
@@ -64,10 +55,10 @@ class Mapping(object):
        def __len__(self):
                return len(list(self))
 
-       if sys.hexversion >= 0x3000000:
-               items = iteritems
-               keys = __iter__
-               values = itervalues
+       # TODO: do we need to keep iter*?
+       items = iteritems
+       keys = __iter__
+       values = itervalues
 
 class MutableMapping(Mapping):
        """
@@ -184,8 +175,8 @@ class UserDict(MutableMapping):
        def clear(self):
                self.data.clear()
 
-       if sys.hexversion >= 0x3000000:
-               keys = __iter__
+       keys = __iter__
+
 
 class ProtectedDict(MutableMapping):
        """
@@ -234,8 +225,8 @@ class ProtectedDict(MutableMapping):
        def __contains__(self, key):
                return key in self.new or (key not in self.blacklist and key in 
self.orig)
 
-       if sys.hexversion >= 0x3000000:
-               keys = __iter__
+       keys = __iter__
+
 
 class LazyLoad(Mapping):
        """
@@ -271,8 +262,8 @@ class LazyLoad(Mapping):
                        self.pull = None
                return key in self.d
 
-       if sys.hexversion >= 0x3000000:
-               keys = __iter__
+       keys = __iter__
+
 
 _slot_dict_classes = weakref.WeakValueDictionary()
 
@@ -328,9 +319,6 @@ def slot_dict_class(keys, prefix="_val_"):
                                        l += 1
                                return l
 
-                       def keys(self):
-                               return list(self)
-
                        def iteritems(self):
                                prefix = self._prefix
                                for k in self.allowed_keys:
@@ -339,16 +327,10 @@ def slot_dict_class(keys, prefix="_val_"):
                                        except AttributeError:
                                                pass
 
-                       def items(self):
-                               return list(self.iteritems())
-
                        def itervalues(self):
                                for k, v in self.iteritems():
                                        yield v
 
-                       def values(self):
-                               return list(self.itervalues())
-
                        def __delitem__(self, k):
                                try:
                                        delattr(self, self._prefix + k)
@@ -447,10 +429,9 @@ def slot_dict_class(keys, prefix="_val_"):
                        def __repr__(self):
                                return repr(dict(self.iteritems()))
 
-                       if sys.hexversion >= 0x3000000:
-                               items = iteritems
-                               keys = __iter__
-                               values = itervalues
+                       items = iteritems
+                       keys = __iter__
+                       values = itervalues
 
                v = SlotDict
                _slot_dict_classes[v.allowed_keys] = v
diff --git a/lib/portage/cache/sql_template.py 
b/lib/portage/cache/sql_template.py
index d023b1b5d..ba75a529f 100644
--- a/lib/portage/cache/sql_template.py
+++ b/lib/portage/cache/sql_template.py
@@ -296,6 +296,5 @@ class SQLDatabase(template.database):
 
                return [ row[0] for row in self.con.fetchall() ]
 
-       if sys.hexversion >= 0x3000000:
-               items = iteritems
-               keys = __iter__
+       items = iteritems
+       keys = __iter__
diff --git a/lib/portage/cache/template.py b/lib/portage/cache/template.py
index d7fff3e32..e2dc3f088 100644
--- a/lib/portage/cache/template.py
+++ b/lib/portage/cache/template.py
@@ -171,9 +171,6 @@ class database(object):
        def has_key(self, cpv):
                return cpv in self
 
-       def keys(self):
-               return list(self)
-
        def iterkeys(self):
                return iter(self)
 
@@ -181,9 +178,6 @@ class database(object):
                for x in self:
                        yield (x, self[x])
 
-       def items(self):
-               return list(self.iteritems())
-
        def sync(self, rate=0):
                self.sync_rate = rate
                if(rate == 0):
@@ -290,9 +284,9 @@ class database(object):
                        if cont:
                                yield cpv
 
-       if sys.hexversion >= 0x3000000:
-               keys = __iter__
-               items = iteritems
+       keys = __iter__
+       items = iteritems
+
 
 _keysorter = operator.itemgetter(0)
 
diff --git a/lib/portage/elog/messages.py b/lib/portage/elog/messages.py
index a4897d8d8..4917d44dd 100644
--- a/lib/portage/elog/messages.py
+++ b/lib/portage/elog/messages.py
@@ -122,8 +122,7 @@ def _elog_base(level, msg, phase="other", key=None, 
color=None, out=None):
        if out in (sys.stdout, sys.stderr):
                formatted_msg = _unicode_encode(formatted_msg,
                        encoding=_encodings['stdio'], errors='backslashreplace')
-               if sys.hexversion >= 0x3000000:
-                       out = out.buffer
+               out = out.buffer
 
        out.write(formatted_msg)
 
diff --git a/lib/portage/output.py b/lib/portage/output.py
index 26880adca..dbfb81714 100644
--- a/lib/portage/output.py
+++ b/lib/portage/output.py
@@ -396,8 +396,7 @@ class ConsoleStyleFile(object):
                if f in (sys.stdout, sys.stderr):
                        s = _unicode_encode(s,
                                encoding=_encodings['stdio'], 
errors='backslashreplace')
-                       if sys.hexversion >= 0x3000000:
-                               f = f.buffer
+                       f = f.buffer
                f.write(s)
 
        def writelines(self, lines):
diff --git a/lib/portage/package/ebuild/config.py 
b/lib/portage/package/ebuild/config.py
index 4ae53f5b2..2e62ef5ce 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -2708,9 +2708,6 @@ class config(object):
                        self[k] = x
                        return x
 
-       def keys(self):
-               return list(self)
-
        def __iter__(self):
                keys = set()
                keys.update(self._constant_keys)
@@ -2725,9 +2722,6 @@ class config(object):
                for k in self:
                        yield (k, self._getitem(k))
 
-       def items(self):
-               return list(self.iteritems())
-
        def __setitem__(self,mykey,myvalue):
                "set a value; will be thrown away at reset() time"
                if not isinstance(myvalue, str):
@@ -2918,6 +2912,5 @@ class config(object):
 
                return self._selinux_enabled
 
-       if sys.hexversion >= 0x3000000:
-               keys = __iter__
-               items = iteritems
+       keys = __iter__
+       items = iteritems
diff --git a/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py 
b/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py
index d7e94d132..6ad987316 100644
--- a/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py
+++ b/lib/portage/tests/util/futures/asyncio/test_subprocess_exec.py
@@ -132,8 +132,6 @@ class SubprocessExecTestCase(TestCase):
                requires an AbstractEventLoop.connect_read_pipe implementation
                (and a ReadTransport implementation for it to return).
                """
-               if sys.version_info.major < 3:
-                       self.skipTest('ReadTransport not implemented for 
python2')
 
                args_tuple = (b'hello', b'world')
                echo_binary = find_binary("echo")
@@ -162,8 +160,6 @@ class SubprocessExecTestCase(TestCase):
                requires an AbstractEventLoop.connect_write_pipe implementation
                (and a WriteTransport implementation for it to return).
                """
-               if sys.version_info.major < 3:
-                       self.skipTest('WriteTransport not implemented for 
python2')
 
                stdin_data = b'hello world'
                cat_binary = find_binary("cat")
diff --git a/lib/portage/tests/util/futures/test_retry.py 
b/lib/portage/tests/util/futures/test_retry.py
index 4530bba83..94ede2e17 100644
--- a/lib/portage/tests/util/futures/test_retry.py
+++ b/lib/portage/tests/util/futures/test_retry.py
@@ -229,6 +229,4 @@ class RetryForkExecutorTestCase(RetryTestCase):
 
 class RetryThreadExecutorTestCase(RetryForkExecutorTestCase):
        def _setUpExecutor(self):
-               if sys.version_info.major < 3:
-                       self.skipTest('ThreadPoolExecutor not supported for 
python2')
                self._executor = ThreadPoolExecutor(max_workers=1)
diff --git a/lib/portage/tests/util/test_socks5.py 
b/lib/portage/tests/util/test_socks5.py
index 5db85b0a6..f7b893996 100644
--- a/lib/portage/tests/util/test_socks5.py
+++ b/lib/portage/tests/util/test_socks5.py
@@ -193,19 +193,13 @@ class Socks5ServerTestCase(TestCase):
                                        'PORTAGE_BIN_PATH': PORTAGE_BIN_PATH,
                                }
 
-                               try:
-                                       proxy = 
socks5.get_socks5_proxy(settings)
-                               except NotImplementedError:
-                                       # bug 658172 for python2.7
-                                       self.skipTest('get_socks5_proxy not 
implemented for {} {}.{}'.format(
-                                               
platform.python_implementation(), *sys.version_info[:2]))
-                               else:
-                                       
loop.run_until_complete(socks5.proxy.ready())
+                               proxy = socks5.get_socks5_proxy(settings)
+                               loop.run_until_complete(socks5.proxy.ready())
 
-                                       result = 
loop.run_until_complete(loop.run_in_executor(None,
-                                               self._fetch_via_proxy, proxy, 
host, server.server_port, path))
+                               result = 
loop.run_until_complete(loop.run_in_executor(None,
+                                       self._fetch_via_proxy, proxy, host, 
server.server_port, path))
 
-                                       self.assertEqual(result, content)
+                               self.assertEqual(result, content)
                finally:
                        socks5.proxy.stop()
                        shutil.rmtree(tempdir)
diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index 0ff34da30..e390874f2 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -72,7 +72,7 @@ def writemsg(mystr, noiselevel=0, fd=None):
                else:
                        mystr = _unicode_encode(mystr,
                                encoding=_encodings['stdio'], 
errors='backslashreplace')
-                       if sys.hexversion >= 0x3000000 and fd in (sys.stdout, 
sys.stderr):
+                       if fd in (sys.stdout, sys.stderr):
                                fd = fd.buffer
                fd.write(mystr)
                fd.flush()
@@ -107,7 +107,7 @@ def normalize_path(mypath):
        We dislike this behavior so we create our own normpath func
        to fix it.
        """
-       if sys.hexversion >= 0x3000000 and isinstance(mypath, bytes):
+       if isinstance(mypath, bytes):
                path_sep = os.path.sep.encode()
        else:
                path_sep = os.path.sep
@@ -591,19 +591,15 @@ def writedict(mydict, myfilename, writekey=True):
                        lines.append("%s %s\n" % (k, " ".join(v)))
        write_atomic(myfilename, "".join(lines))
 
+
 def shlex_split(s):
        """
        This is equivalent to shlex.split, but if the current interpreter is
        python2, it temporarily encodes unicode strings to bytes since python2's
        shlex.split() doesn't handle unicode strings.
        """
-       convert_to_bytes = sys.hexversion < 0x3000000 and not isinstance(s, 
bytes)
-       if convert_to_bytes:
-               s = _unicode_encode(s)
-       rval = shlex.split(s)
-       if convert_to_bytes:
-               rval = [_unicode_decode(x) for x in rval]
-       return rval
+       return shlex.split(s)
+
 
 class _getconfig_shlex(shlex.shlex):
 
@@ -668,15 +664,9 @@ def getconfig(mycfg, tolerant=False, allow_sourcing=False, 
expand=True,
 
        f = None
        try:
-               # NOTE: shlex doesn't support unicode objects with Python 2
-               # (produces spurious \0 characters).
-               if sys.hexversion < 0x3000000:
-                       f = open(_unicode_encode(mycfg,
-                               encoding=_encodings['fs'], errors='strict'), 
'rb')
-               else:
-                       f = open(_unicode_encode(mycfg,
-                               encoding=_encodings['fs'], errors='strict'), 
mode='r',
-                               encoding=_encodings['content'], 
errors='replace')
+               f = open(_unicode_encode(mycfg,
+                       encoding=_encodings['fs'], errors='strict'), mode='r',
+                       encoding=_encodings['content'], errors='replace')
                content = f.read()
        except IOError as e:
                if e.errno == PermissionDenied.errno:
@@ -1309,29 +1299,10 @@ class atomic_ofstream(ObjectProxy):
        def _get_target(self):
                return object.__getattribute__(self, '_file')
 
-       if sys.hexversion >= 0x3000000:
-
-               def __getattribute__(self, attr):
-                       if attr in ('close', 'abort', '__del__'):
-                               return object.__getattribute__(self, attr)
-                       return getattr(object.__getattribute__(self, '_file'), 
attr)
-
-       else:
-
-               # For TextIOWrapper, automatically coerce write calls to
-               # unicode, in order to avoid TypeError when writing raw
-               # bytes with python2.
-
-               def __getattribute__(self, attr):
-                       if attr in ('close', 'abort', 'write', '__del__'):
-                               return object.__getattribute__(self, attr)
-                       return getattr(object.__getattribute__(self, '_file'), 
attr)
-
-               def write(self, s):
-                       f = object.__getattribute__(self, '_file')
-                       if isinstance(f, io.TextIOWrapper):
-                               s = _unicode_decode(s)
-                       return f.write(s)
+       def __getattribute__(self, attr):
+               if attr in ('close', 'abort', '__del__'):
+                       return object.__getattribute__(self, attr)
+               return getattr(object.__getattribute__(self, '_file'), attr)
 
        def close(self):
                """Closes the temporary file, copies permissions (if possible),
diff --git a/lib/portage/util/_dyn_libs/NeededEntry.py 
b/lib/portage/util/_dyn_libs/NeededEntry.py
index 59c4cf87d..154f50690 100644
--- a/lib/portage/util/_dyn_libs/NeededEntry.py
+++ b/lib/portage/util/_dyn_libs/NeededEntry.py
@@ -73,13 +73,3 @@ class NeededEntry(object):
                                (self.multilib_category if 
self.multilib_category
                                is not None else "")
                ]) + "\n"
-
-       if sys.hexversion < 0x3000000:
-
-               __unicode__ = __str__
-
-               def __str__(self):
-                       return _unicode_encode(self.__unicode__(),
-                               encoding=_encodings['content'])
-
-               __str__.__doc__ = __unicode__.__doc__
diff --git a/lib/portage/util/digraph.py b/lib/portage/util/digraph.py
index 23c9e3c1a..e75a3a686 100644
--- a/lib/portage/util/digraph.py
+++ b/lib/portage/util/digraph.py
@@ -383,6 +383,3 @@ class digraph(object):
        __contains__ = contains
        empty = is_empty
        copy = clone
-
-       if sys.hexversion < 0x3000000:
-               __nonzero__ = __bool__
diff --git a/lib/portage/util/listdir.py b/lib/portage/util/listdir.py
index 2012e145f..37312beb6 100644
--- a/lib/portage/util/listdir.py
+++ b/lib/portage/util/listdir.py
@@ -7,8 +7,6 @@ import errno
 import stat
 import sys
 
-if sys.hexversion < 0x3000000:
-       from itertools import izip as zip
 
 from portage import os
 from portage.const import VCS_DIRS
diff --git a/lib/portage/util/whirlpool.py b/lib/portage/util/whirlpool.py
index 170ae73f8..a947dd719 100644
--- a/lib/portage/util/whirlpool.py
+++ b/lib/portage/util/whirlpool.py
@@ -26,8 +26,7 @@
 ## This Python implementation is therefore also placed in the public domain.
 
 import sys
-if sys.hexversion >= 0x3000000:
-    xrange = range
+
 
 #block_size = 64
 digest_size = 64
@@ -641,8 +640,6 @@ def WhirlpoolInit(ctx):
 def WhirlpoolAdd(source, sourceBits, ctx):
     if not isinstance(source, bytes):
         raise TypeError("Expected %s, got %s" % (bytes, type(source)))
-    if sys.hexversion < 0x3000000:
-        source = [ord(s)&0xff for s in source]
 
     carry = 0
     value = sourceBits
@@ -700,19 +697,19 @@ def WhirlpoolFinalize(ctx):
     bufferPos += 1
     if bufferPos > 32:
         if bufferPos < 64:
-            for i in xrange(64 - bufferPos):
+            for i in range(64 - bufferPos):
                 ctx.buffer[bufferPos+i] = 0
         processBuffer(ctx)
         bufferPos = 0
     if bufferPos < 32:
-        for i in xrange(32 - bufferPos):
+        for i in range(32 - bufferPos):
             ctx.buffer[bufferPos+i] = 0
     bufferPos = 32
-    for i in xrange(32):
+    for i in range(32):
         ctx.buffer[32+i] = ctx.bitLength[i]
     processBuffer(ctx)
     digest = ''
-    for i in xrange(8):
+    for i in range(8):
         digest += chr((ctx.hash[i] >> 56) % 0x100)
         digest += chr((ctx.hash[i] >> 48) % 0x100)
         digest += chr((ctx.hash[i] >> 40) % 0x100)
@@ -743,7 +740,7 @@ def processBuffer(ctx):
     buffr = ctx.buffer
 
     buf_cnt = 0
-    for i in xrange(8):
+    for i in range(8):
         block[i] = ((buffr[buf_cnt+0] & 0xff) << 56) ^ \
                    ((buffr[buf_cnt+1] & 0xff) << 48) ^ \
                    ((buffr[buf_cnt+2] & 0xff) << 40) ^ \
@@ -753,11 +750,11 @@ def processBuffer(ctx):
                    ((buffr[buf_cnt+6] & 0xff) <<  8) ^ \
                    ((buffr[buf_cnt+7] & 0xff) <<  0)
         buf_cnt += 8
-    for i in xrange(8):
+    for i in range(8):
         K[i] = ctx.hash[i]
         state[i] = block[i] ^ K[i]
 
-    for r in xrange(1, R+1):
+    for r in range(1, R+1):
         L[0] = CDo(K, 0, 7, 6, 5, 4, 3, 2, 1) ^ rc[r]
         L[1] = CDo(K, 1, 0, 7, 6, 5, 4, 3, 2)
         L[2] = CDo(K, 2, 1, 0, 7, 6, 5, 4, 3)
@@ -766,7 +763,7 @@ def processBuffer(ctx):
         L[5] = CDo(K, 5, 4, 3, 2, 1, 0, 7, 6)
         L[6] = CDo(K, 6, 5, 4, 3, 2, 1, 0, 7)
         L[7] = CDo(K, 7, 6, 5, 4, 3, 2, 1, 0)
-        for i in xrange(8):
+        for i in range(8):
             K[i] = L[i]
         L[0] = CDo(state, 0, 7, 6, 5, 4, 3, 2, 1) ^ K[0]
         L[1] = CDo(state, 1, 0, 7, 6, 5, 4, 3, 2) ^ K[1]
@@ -776,10 +773,10 @@ def processBuffer(ctx):
         L[5] = CDo(state, 5, 4, 3, 2, 1, 0, 7, 6) ^ K[5]
         L[6] = CDo(state, 6, 5, 4, 3, 2, 1, 0, 7) ^ K[6]
         L[7] = CDo(state, 7, 6, 5, 4, 3, 2, 1, 0) ^ K[7]
-        for i in xrange(8):
+        for i in range(8):
             state[i] = L[i]
     # apply the Miyaguchi-Preneel compression function
-    for i in xrange(8):
+    for i in range(8):
         ctx.hash[i] ^= state[i] ^ block[i]
     return
 
diff --git a/lib/portage/xpak.py b/lib/portage/xpak.py
index c708190b9..23539b6be 100644
--- a/lib/portage/xpak.py
+++ b/lib/portage/xpak.py
@@ -78,8 +78,6 @@ def encodeint(myint):
 def decodeint(mystring):
        """Takes a 4 byte string and converts it into a 4 byte integer.
        Returns an integer."""
-       if sys.hexversion < 0x3000000:
-               mystring = [ord(x) for x in mystring]
        myint = 0
        myint += mystring[3]
        myint += mystring[2] << 8
-- 
2.27.0


Reply via email to