summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Biegel <jason.biegel@shopspring.com>2017-02-03 10:20:50 -0500
committerJason Biegel <jason.biegel@shopspring.com>2017-02-17 15:30:58 -0500
commit0b2ffffbd3efb626236bf215ec73179aee1f0843 (patch)
tree9d7b0529506224969276448e386fd369d9e8a331
parent0b3295798fd814ade5df7a14ac617a91ca81ef20 (diff)
downloadpymemcache-0b2ffffbd3efb626236bf215ec73179aee1f0843.tar.gz
Add gets_many to HashClient.
-rw-r--r--pymemcache/client/hash.py15
-rw-r--r--pymemcache/test/test_client_hash.py19
2 files changed, 32 insertions, 2 deletions
diff --git a/pymemcache/client/hash.py b/pymemcache/client/hash.py
index 1845bff..5e2d6ff 100644
--- a/pymemcache/client/hash.py
+++ b/pymemcache/client/hash.py
@@ -268,7 +268,7 @@ class HashClient(object):
set_multi = set_many
- def get_many(self, keys, *args, **kwargs):
+ def get_many(self, keys, gets=False, *args, **kwargs):
client_batches = {}
end = {}
@@ -288,9 +288,15 @@ class HashClient(object):
client = self.clients['%s:%s' % server]
new_args = list(args)
new_args.insert(0, keys)
+
+ if gets:
+ get_func = client.gets_many
+ else:
+ get_func = client.get_many
+
result = self._safely_run_func(
client,
- client.get_many, {}, *new_args, **kwargs
+ get_func, {}, *new_args, **kwargs
)
end.update(result)
@@ -301,6 +307,11 @@ class HashClient(object):
def gets(self, key, *args, **kwargs):
return self._run_cmd('gets', key, None, *args, **kwargs)
+ def gets_many(self, keys, *args, **kwargs):
+ return self.get_many(keys, gets=True, *args, **kwargs)
+
+ gets_multi = gets_many
+
def add(self, key, *args, **kwargs):
return self._run_cmd('add', key, False, *args, **kwargs)
diff --git a/pymemcache/test/test_client_hash.py b/pymemcache/test/test_client_hash.py
index 0d08b41..30b2130 100644
--- a/pymemcache/test/test_client_hash.py
+++ b/pymemcache/test/test_client_hash.py
@@ -123,6 +123,25 @@ class TestHashClient(ClientTestMixin, unittest.TestCase):
result = client.get_many([b'key1', b'key3'])
assert result == {}
+ def test_gets_many(self):
+ client = self.make_client(*[
+ [b'STORED\r\n', b'VALUE key3 0 6 1\r\nvalue2\r\nEND\r\n', ],
+ [b'STORED\r\n', b'VALUE key1 0 6 1\r\nvalue1\r\nEND\r\n', ],
+ ])
+
+ def get_clients(key):
+ if key == b'key3':
+ return client.clients['127.0.0.1:11012']
+ else:
+ return client.clients['127.0.0.1:11013']
+
+ client._get_client = get_clients
+
+ result = client.set(b'key1', b'value1', noreply=False)
+ result = client.set(b'key3', b'value2', noreply=False)
+ result = client.gets_many([b'key1', b'key3'])
+ assert result == {b'key1': (b'value1', b'1'), b'key3': (b'value2', b'1')}
+
def test_no_servers_left(self):
from pymemcache.client.hash import HashClient
client = HashClient(