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