Index: python-memcached-1.59/memcache.py =================================================================== --- python-memcached-1.59.orig/memcache.py +++ python-memcached-1.59/memcache.py @@ -45,7 +45,6 @@ More detailed documentation is available """ -from __future__ import print_function import binascii from io import BytesIO @@ -56,13 +55,7 @@ import threading import time import zlib -import six - -if six.PY2: - # With Python 2, the faster C implementation has to be imported explicitly. - import cPickle as pickle -else: - import pickle +import pickle def cmemcache_hash(key): @@ -107,7 +100,7 @@ _SOCKET_TIMEOUT = 3 # number of seconds class Client(threading.local): - """Object representing a pool of memcache servers. + r"""Object representing a pool of memcache servers. See L{memcache} for an overview. @@ -207,7 +200,7 @@ class Client(threading.local): to ensure it is the correct length and composed of the right characters. """ - super(Client, self).__init__() + super().__init__() self.debug = debug self.dead_retry = dead_retry self.socket_timeout = socket_timeout @@ -243,19 +236,18 @@ class Client(threading.local): def _encode_key(self, key): if isinstance(key, tuple): - if isinstance(key[1], six.text_type): + if isinstance(key[1], str): return (key[0], key[1].encode('utf8')) - elif isinstance(key, six.text_type): + elif isinstance(key, str): return key.encode('utf8') return key def _encode_cmd(self, cmd, key, headers, noreply, *args): - cmd_bytes = cmd.encode('utf-8') if six.PY3 else cmd + cmd_bytes = cmd.encode('utf-8') fullcmd = [cmd_bytes, b' ', key] if headers: - if six.PY3: - headers = headers.encode('utf-8') + headers = headers.encode('utf-8') fullcmd.append(b' ') fullcmd.append(headers) @@ -311,11 +303,11 @@ class Client(threading.local): if not s.connect(): continue if s.family == socket.AF_INET: - name = '%s:%s (%s)' % (s.ip, s.port, s.weight) + name = '{}:{} ({})'.format(s.ip, s.port, s.weight) elif s.family == socket.AF_INET6: - name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight) + name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight) else: - name = 'unix:%s (%s)' % (s.address, s.weight) + name = 'unix:{} ({})'.format(s.address, s.weight) if not stat_args: s.send_cmd('stats') else: @@ -338,11 +330,11 @@ class Client(threading.local): if not s.connect(): continue if s.family == socket.AF_INET: - name = '%s:%s (%s)' % (s.ip, s.port, s.weight) + name = '{}:{} ({})'.format(s.ip, s.port, s.weight) elif s.family == socket.AF_INET6: - name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight) + name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight) else: - name = 'unix:%s (%s)' % (s.address, s.weight) + name = 'unix:{} ({})'.format(s.address, s.weight) serverData = {} data.append((name, serverData)) s.send_cmd('stats slabs') @@ -369,11 +361,11 @@ class Client(threading.local): if not s.connect(): continue if s.family == socket.AF_INET: - name = '%s:%s (%s)' % (s.ip, s.port, s.weight) + name = '{}:{} ({})'.format(s.ip, s.port, s.weight) elif s.family == socket.AF_INET6: - name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight) + name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight) else: - name = 'unix:%s (%s)' % (s.address, s.weight) + name = 'unix:{} ({})'.format(s.address, s.weight) serverData = {} data.append((name, serverData)) s.send_cmd('stats items') @@ -434,7 +426,7 @@ class Client(threading.local): # print("(using server %s)" % server,) return server, key serverhash = str(serverhash) + str(i) - if isinstance(serverhash, six.text_type): + if isinstance(serverhash, str): serverhash = serverhash.encode('ascii') serverhash = serverHashFunction(serverhash) return None, None @@ -479,7 +471,7 @@ class Client(threading.local): dead_servers = [] rc = 1 - for server in six.iterkeys(server_keys): + for server in server_keys.keys(): bigcmd = [] write = bigcmd.append if time is not None: @@ -491,7 +483,7 @@ class Client(threading.local): write(cmd) try: server.send_cmds(b''.join(bigcmd)) - except socket.error as msg: + except OSError as msg: rc = 0 if isinstance(msg, tuple): msg = msg[1] @@ -506,11 +498,11 @@ class Client(threading.local): for server in dead_servers: del server_keys[server] - for server, keys in six.iteritems(server_keys): + for server, keys in server_keys.items(): try: for key in keys: server.expect(b"DELETED") - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -568,7 +560,7 @@ class Client(threading.local): return 1 self.debuglog('%s expected %s, got: %r' % (cmd, b' or '.join(expected), line)) - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -642,7 +634,7 @@ class Client(threading.local): if line is None or line.strip() == b'NOT_FOUND': return None return int(line) - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -789,11 +781,10 @@ class Client(threading.local): serverhash, key = orig_key key = self._encode_key(key) - if not isinstance(key, six.binary_type): + if not isinstance(key, bytes): # set_multi supports int / long keys. key = str(key) - if six.PY3: - key = key.encode('utf8') + key = key.encode('utf8') bytes_orig_key = key # Gotta pre-mangle key before hashing to a @@ -804,11 +795,10 @@ class Client(threading.local): orig_key = orig_key[1] else: key = self._encode_key(orig_key) - if not isinstance(key, six.binary_type): + if not isinstance(key, bytes): # set_multi supports int / long keys. key = str(key) - if six.PY3: - key = key.encode('utf8') + key = key.encode('utf8') bytes_orig_key = key server, key = self._get_server(key_prefix + key) @@ -893,13 +883,13 @@ class Client(threading.local): self._statlog('set_multi') server_keys, prefixed_to_orig_key = self._map_and_prefix_keys( - six.iterkeys(mapping), key_prefix) + mapping.keys(), key_prefix) # send out all requests on each server before reading anything dead_servers = [] notstored = [] # original keys. - for server in six.iterkeys(server_keys): + for server in server_keys.keys(): bigcmd = [] write = bigcmd.append try: @@ -917,7 +907,7 @@ class Client(threading.local): else: notstored.append(prefixed_to_orig_key[key]) server.send_cmds(b''.join(bigcmd)) - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -935,7 +925,7 @@ class Client(threading.local): if not server_keys: return list(mapping.keys()) - for server, keys in six.iteritems(server_keys): + for server, keys in server_keys.items(): try: for key in keys: if server.readline() == b'STORED': @@ -943,7 +933,7 @@ class Client(threading.local): else: # un-mangle. notstored.append(prefixed_to_orig_key[key]) - except (_Error, socket.error) as msg: + except (_Error, OSError) as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -960,23 +950,15 @@ class Client(threading.local): # subclasses of native types (such as markup-safe strings) are pickled # and restored as instances of the correct class. val_type = type(val) - if val_type == six.binary_type: + if val_type == bytes: pass - elif val_type == six.text_type: + elif val_type == str: flags |= Client._FLAG_TEXT val = val.encode('utf-8') elif val_type == int: flags |= Client._FLAG_INTEGER val = '%d' % val - if six.PY3: - val = val.encode('ascii') - # force no attempt to compress this silly string. - min_compress_len = 0 - elif six.PY2 and isinstance(val, long): # noqa: F821 - flags |= Client._FLAG_LONG - val = str(val) - if six.PY3: - val = val.encode('ascii') + val = val.encode('ascii') # force no attempt to compress this silly string. min_compress_len = 0 else: @@ -1042,7 +1024,7 @@ class Client(threading.local): if noreply: return True return server.expect(b"STORED", raise_exception=True) == b"STORED" - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -1055,7 +1037,7 @@ class Client(threading.local): try: if server._get_socket(): return _unsafe_set() - except (_ConnectionDeadError, socket.error) as msg: + except (_ConnectionDeadError, OSError) as msg: server.mark_dead(msg) return 0 @@ -1071,7 +1053,7 @@ class Client(threading.local): self._statlog(cmd) try: - cmd_bytes = cmd.encode('utf-8') if six.PY3 else cmd + cmd_bytes = cmd.encode('utf-8') fullcmd = b''.join((cmd_bytes, b' ', key)) server.send_cmd(fullcmd) rkey = flags = rlen = cas_id = None @@ -1093,7 +1075,7 @@ class Client(threading.local): value = self._recv_value(server, flags, rlen) finally: server.expect(b"END", raise_exception=True) - except (_Error, socket.error) as msg: + except (_Error, OSError) as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -1109,7 +1091,7 @@ class Client(threading.local): if server.connect(): return _unsafe_get() return None - except (_ConnectionDeadError, socket.error) as msg: + except (_ConnectionDeadError, OSError) as msg: server.mark_dead(msg) return None @@ -1189,11 +1171,11 @@ class Client(threading.local): # send out all requests on each server before reading anything dead_servers = [] - for server in six.iterkeys(server_keys): + for server in server_keys.keys(): try: fullcmd = b"get " + b" ".join(server_keys[server]) server.send_cmd(fullcmd) - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -1204,7 +1186,7 @@ class Client(threading.local): del server_keys[server] retvals = {} - for server in six.iterkeys(server_keys): + for server in server_keys.keys(): try: line = server.readline() while line and line != b'END': @@ -1215,7 +1197,7 @@ class Client(threading.local): # un-prefix returned key. retvals[prefixed_to_orig_key[rkey]] = val line = server.readline() - except (_Error, socket.error) as msg: + except (_Error, OSError) as msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) @@ -1264,10 +1246,7 @@ class Client(threading.local): elif flags & Client._FLAG_INTEGER: val = int(buf) elif flags & Client._FLAG_LONG: - if six.PY3: - val = int(buf) - else: - val = long(buf) # noqa: F821 + val = int(buf) elif flags & Client._FLAG_PICKLE: try: file = BytesIO(buf) @@ -1300,14 +1279,14 @@ class Client(threading.local): key = key[1] if key is None: raise Client.MemcachedKeyNoneError("Key is None") - if key is '': - if key_extra_len is 0: + if key == '': + if key_extra_len == 0: raise Client.MemcachedKeyNoneError("Key is empty") # key is empty but there is some other component to key return - if not isinstance(key, six.binary_type): + if not isinstance(key, bytes): raise Client.MemcachedKeyTypeError("Key must be a binary string") if (self.server_max_key_length != 0 and @@ -1320,7 +1299,7 @@ class Client(threading.local): "Control/space characters not allowed (key=%r)" % key) -class _Host(object): +class _Host: def __init__(self, host, debug=0, dead_retry=_DEAD_RETRY, socket_timeout=_SOCKET_TIMEOUT, flush_on_reconnect=0): @@ -1383,7 +1362,7 @@ class _Host(object): return 0 def mark_dead(self, reason): - self.debuglog("MemCache: %s: %s. Marking dead." % (self, reason)) + self.debuglog("MemCache: {}: {}. Marking dead.".format(self, reason)) self.deaduntil = time.time() + self.dead_retry if self.flush_on_reconnect: self.flush_on_next_connect = 1 @@ -1402,7 +1381,7 @@ class _Host(object): except socket.timeout as msg: self.mark_dead("connect: %s" % msg) return None - except socket.error as msg: + except OSError as msg: if isinstance(msg, tuple): msg = msg[1] self.mark_dead("connect: %s" % msg) @@ -1420,13 +1399,13 @@ class _Host(object): self.socket = None def send_cmd(self, cmd): - if isinstance(cmd, six.text_type): + if isinstance(cmd, str): cmd = cmd.encode('utf8') self.socket.sendall(cmd + b'\r\n') def send_cmds(self, cmds): """cmds already has trailing \r\n's applied.""" - if isinstance(cmds, six.text_type): + if isinstance(cmds, str): cmds = cmds.encode('utf8') self.socket.sendall(cmds) @@ -1462,11 +1441,8 @@ class _Host(object): def expect(self, text, raise_exception=False): line = self.readline(raise_exception) if self.debug and line != text: - if six.PY3: - text = text.decode('utf8') - log_line = line.decode('utf8', 'replace') - else: - log_line = line + text = text.decode('utf8') + log_line = line.decode('utf8', 'replace') self.debuglog("while expecting %r, got unexpected response %r" % (text, log_line)) return line @@ -1497,7 +1473,7 @@ class _Host(object): elif self.family == socket.AF_INET6: return "inet6:[%s]:%d%s" % (self.address[0], self.address[1], d) else: - return "unix:%s%s" % (self.address, d) + return "unix:{}{}".format(self.address, d) def _doctest(): @@ -1508,7 +1484,7 @@ def _doctest(): globs = {"mc": mc} results = doctest.testmod(memcache, globs=globs) mc.disconnect_all() - print("Doctests: %s" % (results,)) + print("Doctests: {}".format(results)) if results.failed: sys.exit(1) Index: python-memcached-1.59/requirements.txt =================================================================== --- python-memcached-1.59.orig/requirements.txt +++ python-memcached-1.59/requirements.txt @@ -1 +0,0 @@ -six>=1.4.0 Index: python-memcached-1.59/tests/utils.py =================================================================== --- python-memcached-1.59.orig/tests/utils.py +++ python-memcached-1.59/tests/utils.py @@ -1,7 +1,7 @@ from contextlib import contextmanager import sys -from six import StringIO +from io import StringIO @contextmanager