Skip to content

Commit b6343d2

Browse files
authored
Merge pull request #186 from pgajdos/no_python2
Removing historic python 2to3 code and deprecated socket.error (for OSError).
2 parents 5715828 + f9b43a2 commit b6343d2

File tree

3 files changed

+48
-52
lines changed

3 files changed

+48
-52
lines changed

memcache.py

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
4646
"""
4747

48-
from __future__ import print_function
4948

5049
import binascii
5150
from datetime import timedelta
@@ -57,8 +56,6 @@
5756
import time
5857
import zlib
5958

60-
import six
61-
6259
import pickle
6360

6461

@@ -211,7 +208,7 @@ def __init__(self, servers, debug=0, pickleProtocol=0,
211208
be expected to take one parameter (the key) and return a new encoded
212209
key as a result.
213210
"""
214-
super(Client, self).__init__()
211+
super().__init__()
215212
self.debug = debug
216213
self.dead_retry = dead_retry
217214
self.socket_timeout = socket_timeout
@@ -251,9 +248,9 @@ def key_encoder(key):
251248

252249
def _encode_key(self, key):
253250
if isinstance(key, tuple):
254-
if isinstance(key[1], six.text_type):
251+
if isinstance(key[1], str):
255252
return (key[0], key[1].encode('utf8'))
256-
elif isinstance(key, six.text_type):
253+
elif isinstance(key, str):
257254
return key.encode('utf8')
258255
return key
259256

@@ -318,11 +315,11 @@ def get_stats(self, stat_args=None):
318315
if not s.connect():
319316
continue
320317
if s.family == socket.AF_INET:
321-
name = '%s:%s (%s)' % (s.ip, s.port, s.weight)
318+
name = '{}:{} ({})'.format(s.ip, s.port, s.weight)
322319
elif s.family == socket.AF_INET6:
323-
name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight)
320+
name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight)
324321
else:
325-
name = 'unix:%s (%s)' % (s.address, s.weight)
322+
name = 'unix:{} ({})'.format(s.address, s.weight)
326323
if not stat_args:
327324
s.send_cmd('stats')
328325
else:
@@ -347,11 +344,11 @@ def get_slab_stats(self):
347344
if not s.connect():
348345
continue
349346
if s.family == socket.AF_INET:
350-
name = '%s:%s (%s)' % (s.ip, s.port, s.weight)
347+
name = '{}:{} ({})'.format(s.ip, s.port, s.weight)
351348
elif s.family == socket.AF_INET6:
352-
name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight)
349+
name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight)
353350
else:
354-
name = 'unix:%s (%s)' % (s.address, s.weight)
351+
name = 'unix:{} ({})'.format(s.address, s.weight)
355352
serverData = {}
356353
data.append((name, serverData))
357354
s.send_cmd('stats slabs')
@@ -385,11 +382,11 @@ def get_slabs(self):
385382
if not s.connect():
386383
continue
387384
if s.family == socket.AF_INET:
388-
name = '%s:%s (%s)' % (s.ip, s.port, s.weight)
385+
name = '{}:{} ({})'.format(s.ip, s.port, s.weight)
389386
elif s.family == socket.AF_INET6:
390-
name = '[%s]:%s (%s)' % (s.ip, s.port, s.weight)
387+
name = '[{}]:{} ({})'.format(s.ip, s.port, s.weight)
391388
else:
392-
name = 'unix:%s (%s)' % (s.address, s.weight)
389+
name = 'unix:{} ({})'.format(s.address, s.weight)
393390
serverData = {}
394391
data.append((name, serverData))
395392
s.send_cmd('stats items')
@@ -450,7 +447,7 @@ def _get_server(self, key):
450447
# print("(using server %s)" % server,)
451448
return server, key
452449
serverhash = str(serverhash) + str(i)
453-
if isinstance(serverhash, six.text_type):
450+
if isinstance(serverhash, str):
454451
serverhash = serverhash.encode('ascii')
455452
serverhash = serverHashFunction(serverhash)
456453
return None, None
@@ -495,7 +492,7 @@ def delete_multi(self, keys, time=None, key_prefix='', noreply=False):
495492
dead_servers = []
496493

497494
rc = 1
498-
for server in six.iterkeys(server_keys):
495+
for server in server_keys.keys():
499496
bigcmd = []
500497
write = bigcmd.append
501498
if time is not None:
@@ -507,7 +504,7 @@ def delete_multi(self, keys, time=None, key_prefix='', noreply=False):
507504
write(cmd)
508505
try:
509506
server.send_cmds(b''.join(bigcmd))
510-
except socket.error as msg:
507+
except OSError as msg:
511508
rc = 0
512509
if isinstance(msg, tuple):
513510
msg = msg[1]
@@ -522,11 +519,11 @@ def delete_multi(self, keys, time=None, key_prefix='', noreply=False):
522519
for server in dead_servers:
523520
del server_keys[server]
524521

525-
for server, keys in six.iteritems(server_keys):
522+
for server, keys in server_keys.items():
526523
try:
527524
for key in keys:
528525
server.expect(b"DELETED")
529-
except socket.error as msg:
526+
except OSError as msg:
530527
if isinstance(msg, tuple):
531528
msg = msg[1]
532529
server.mark_dead(msg)
@@ -557,8 +554,8 @@ def delete(self, key, noreply=False):
557554
line = server.readline()
558555
if line and line.strip() in [b'DELETED', b'NOT_FOUND']:
559556
return 1
560-
self.debuglog('delete expected DELETED or NOT_FOUND, got: %r' % (line,))
561-
except socket.error as msg:
557+
self.debuglog('delete expected DELETED or NOT_FOUND, got: {!r}'.format(line))
558+
except OSError as msg:
562559
if isinstance(msg, tuple):
563560
msg = msg[1]
564561
server.mark_dead(msg)
@@ -593,8 +590,8 @@ def touch(self, key, time=0, noreply=False):
593590
line = server.readline()
594591
if line and line.strip() in [b'TOUCHED']:
595592
return 1
596-
self.debuglog('touch expected TOUCHED, got: %r' % (line,))
597-
except socket.error as msg:
593+
self.debuglog('touch expected TOUCHED, got: {!r}'.format(line))
594+
except OSError as msg:
598595
if isinstance(msg, tuple):
599596
msg = msg[1]
600597
server.mark_dead(msg)
@@ -668,7 +665,7 @@ def _incrdecr(self, cmd, key, delta, noreply=False):
668665
if line is None or line.strip() == b'NOT_FOUND':
669666
return None
670667
return int(line)
671-
except socket.error as msg:
668+
except OSError as msg:
672669
if isinstance(msg, tuple):
673670
msg = msg[1]
674671
server.mark_dead(msg)
@@ -817,7 +814,7 @@ def _map_and_prefix_keys(self, key_iterable, key_prefix):
817814
serverhash, key = orig_key
818815

819816
key = self._encode_key(self.key_encoder(key))
820-
if not isinstance(key, six.binary_type):
817+
if not isinstance(key, bytes):
821818
# set_multi supports int / long keys.
822819
key = str(key).encode('utf8')
823820
bytes_orig_key = key
@@ -828,7 +825,7 @@ def _map_and_prefix_keys(self, key_iterable, key_prefix):
828825
(serverhash, key_prefix + key))
829826
else:
830827
key = self._encode_key(self.key_encoder(orig_key))
831-
if not isinstance(key, six.binary_type):
828+
if not isinstance(key, bytes):
832829
# set_multi supports int / long keys.
833830
key = str(key).encode('utf8')
834831
bytes_orig_key = key
@@ -915,13 +912,13 @@ def set_multi(self, mapping, time=0, key_prefix='', min_compress_len=0,
915912
self._statlog('set_multi')
916913

917914
server_keys, prefixed_to_orig_key = self._map_and_prefix_keys(
918-
six.iterkeys(mapping), key_prefix)
915+
mapping.keys(), key_prefix)
919916

920917
# send out all requests on each server before reading anything
921918
dead_servers = []
922919
notstored = [] # original keys.
923920

924-
for server in six.iterkeys(server_keys):
921+
for server in server_keys.keys():
925922
bigcmd = []
926923
write = bigcmd.append
927924
try:
@@ -939,7 +936,7 @@ def set_multi(self, mapping, time=0, key_prefix='', min_compress_len=0,
939936
else:
940937
notstored.append(prefixed_to_orig_key[key])
941938
server.send_cmds(b''.join(bigcmd))
942-
except socket.error as msg:
939+
except OSError as msg:
943940
if isinstance(msg, tuple):
944941
msg = msg[1]
945942
server.mark_dead(msg)
@@ -957,15 +954,15 @@ def set_multi(self, mapping, time=0, key_prefix='', min_compress_len=0,
957954
if not server_keys:
958955
return list(mapping.keys())
959956

960-
for server, keys in six.iteritems(server_keys):
957+
for server, keys in server_keys.items():
961958
try:
962959
for key in keys:
963960
if server.readline() == b'STORED':
964961
continue
965962
else:
966963
# un-mangle.
967964
notstored.append(prefixed_to_orig_key[key])
968-
except (_Error, socket.error) as msg:
965+
except (_Error, OSError) as msg:
969966
if isinstance(msg, tuple):
970967
msg = msg[1]
971968
server.mark_dead(msg)
@@ -982,9 +979,9 @@ def _val_to_store_info(self, val, min_compress_len):
982979
# subclasses of native types (such as markup-safe strings) are pickled
983980
# and restored as instances of the correct class.
984981
val_type = type(val)
985-
if val_type == six.binary_type:
982+
if val_type == bytes:
986983
pass
987-
elif val_type == six.text_type:
984+
elif val_type == str:
988985
flags |= Client._FLAG_TEXT
989986
val = val.encode('utf-8')
990987
elif val_type == int:
@@ -1054,7 +1051,7 @@ def _unsafe_set():
10541051
if noreply:
10551052
return True
10561053
return server.expect(b"STORED", raise_exception=True) == b"STORED"
1057-
except socket.error as msg:
1054+
except OSError as msg:
10581055
if isinstance(msg, tuple):
10591056
msg = msg[1]
10601057
server.mark_dead(msg)
@@ -1067,7 +1064,7 @@ def _unsafe_set():
10671064
try:
10681065
if server._get_socket():
10691066
return _unsafe_set()
1070-
except (_ConnectionDeadError, socket.error) as msg:
1067+
except (_ConnectionDeadError, OSError) as msg:
10711068
server.mark_dead(msg)
10721069
return 0
10731070

@@ -1105,7 +1102,7 @@ def _unsafe_get():
11051102
value = self._recv_value(server, flags, rlen)
11061103
finally:
11071104
server.expect(b"END", raise_exception=True)
1108-
except (_Error, socket.error) as msg:
1105+
except (_Error, OSError) as msg:
11091106
if isinstance(msg, tuple):
11101107
msg = msg[1]
11111108
server.mark_dead(msg)
@@ -1121,7 +1118,7 @@ def _unsafe_get():
11211118
if server.connect():
11221119
return _unsafe_get()
11231120
return None
1124-
except (_ConnectionDeadError, socket.error) as msg:
1121+
except (_ConnectionDeadError, OSError) as msg:
11251122
server.mark_dead(msg)
11261123
return None
11271124

@@ -1201,11 +1198,11 @@ def get_multi(self, keys, key_prefix=''):
12011198

12021199
# send out all requests on each server before reading anything
12031200
dead_servers = []
1204-
for server in six.iterkeys(server_keys):
1201+
for server in server_keys.keys():
12051202
try:
12061203
fullcmd = b"get " + b" ".join(server_keys[server])
12071204
server.send_cmd(fullcmd)
1208-
except socket.error as msg:
1205+
except OSError as msg:
12091206
if isinstance(msg, tuple):
12101207
msg = msg[1]
12111208
server.mark_dead(msg)
@@ -1216,7 +1213,7 @@ def get_multi(self, keys, key_prefix=''):
12161213
del server_keys[server]
12171214

12181215
retvals = {}
1219-
for server in six.iterkeys(server_keys):
1216+
for server in server_keys.keys():
12201217
try:
12211218
line = server.readline()
12221219
while line and line != b'END':
@@ -1227,7 +1224,7 @@ def get_multi(self, keys, key_prefix=''):
12271224
# un-prefix returned key.
12281225
retvals[prefixed_to_orig_key[rkey]] = val
12291226
line = server.readline()
1230-
except (_Error, socket.error) as msg:
1227+
except (_Error, OSError) as msg:
12311228
if isinstance(msg, tuple):
12321229
msg = msg[1]
12331230
server.mark_dead(msg)
@@ -1316,7 +1313,7 @@ def check_key(self, key, key_extra_len=0):
13161313
# key is empty but there is some other component to key
13171314
return
13181315

1319-
if not isinstance(key, six.binary_type):
1316+
if not isinstance(key, bytes):
13201317
raise Client.MemcachedKeyTypeError("Key must be a binary string")
13211318

13221319
if (self.server_max_key_length != 0 and len(key) + key_extra_len > self.server_max_key_length):
@@ -1328,7 +1325,7 @@ def check_key(self, key, key_extra_len=0):
13281325
"Control/space characters not allowed (key=%r)" % key)
13291326

13301327

1331-
class _Host(object):
1328+
class _Host:
13321329

13331330
def __init__(self, host, debug=0, dead_retry=_DEAD_RETRY,
13341331
socket_timeout=_SOCKET_TIMEOUT, flush_on_reconnect=0):
@@ -1391,7 +1388,7 @@ def connect(self):
13911388
return 0
13921389

13931390
def mark_dead(self, reason):
1394-
self.debuglog("MemCache: %s: %s. Marking dead." % (self, reason))
1391+
self.debuglog("MemCache: {}: {}. Marking dead.".format(self, reason))
13951392
self.deaduntil = time.time() + self.dead_retry
13961393
if self.flush_on_reconnect:
13971394
self.flush_on_next_connect = 1
@@ -1410,7 +1407,7 @@ def _get_socket(self):
14101407
except socket.timeout as msg:
14111408
self.mark_dead("connect: %s" % msg)
14121409
return None
1413-
except socket.error as msg:
1410+
except OSError as msg:
14141411
if isinstance(msg, tuple):
14151412
msg = msg[1]
14161413
self.mark_dead("connect: %s" % msg)
@@ -1428,13 +1425,13 @@ def close_socket(self):
14281425
self.socket = None
14291426

14301427
def send_cmd(self, cmd):
1431-
if isinstance(cmd, six.text_type):
1428+
if isinstance(cmd, str):
14321429
cmd = cmd.encode('utf8')
14331430
self.socket.sendall(cmd + b'\r\n')
14341431

14351432
def send_cmds(self, cmds):
14361433
"""cmds already has trailing \r\n's applied."""
1437-
if isinstance(cmds, six.text_type):
1434+
if isinstance(cmds, str):
14381435
cmds = cmds.encode('utf8')
14391436
self.socket.sendall(cmds)
14401437

@@ -1519,7 +1516,7 @@ def __str__(self):
15191516
elif self.family == socket.AF_INET6:
15201517
return "inet6:[%s]:%d%s" % (self.address[0], self.address[1], d)
15211518
else:
1522-
return "unix:%s%s" % (self.address, d)
1519+
return "unix:{}{}".format(self.address, d)
15231520

15241521

15251522
def _doctest():
@@ -1530,7 +1527,7 @@ def _doctest():
15301527
globs = {"mc": mc}
15311528
results = doctest.testmod(memcache, globs=globs)
15321529
mc.disconnect_all()
1533-
print("Doctests: %s" % (results,))
1530+
print("Doctests: {}".format(results))
15341531
if results.failed:
15351532
sys.exit(1)
15361533

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
six>=1.4.0

tests/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from contextlib import contextmanager
22
import sys
33

4-
from six import StringIO
4+
from io import StringIO
55

66

77
@contextmanager

0 commit comments

Comments
 (0)