summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Walker <brendan.walker4@gmail.com>2017-02-17 18:36:39 -0500
committerGitHub <noreply@github.com>2017-02-17 18:36:39 -0500
commit71de18c79d90ed9be30bd5dae8095c3d4334bca4 (patch)
tree58a50782381d3a3026d40a16d662f5a527018b95
parent6ef4948e53938c14f5af7cf59f60e193549f2fd0 (diff)
parentad5c251221bc87338741a38b7d0c1f5ccb57c7c1 (diff)
downloadpymemcache-71de18c79d90ed9be30bd5dae8095c3d4334bca4.tar.gz
Merge pull request #1 from pinterest/master
Merging latest commits
-rw-r--r--pymemcache/client/hash.py15
-rw-r--r--pymemcache/test/test_client_hash.py19
-rw-r--r--test-requirements.txt2
3 files changed, 33 insertions, 3 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(
diff --git a/test-requirements.txt b/test-requirements.txt
index 777ad0d..09c8163 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,4 +1,4 @@
mock
pytest
pytest-cov
-gevent; "PyPy" not in platform_python_implementation
+gevent==1.1; "PyPy" not in platform_python_implementation