diff options
author | Brendan Walker <brendan.walker4@gmail.com> | 2017-02-17 18:36:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-17 18:36:39 -0500 |
commit | 71de18c79d90ed9be30bd5dae8095c3d4334bca4 (patch) | |
tree | 58a50782381d3a3026d40a16d662f5a527018b95 | |
parent | 6ef4948e53938c14f5af7cf59f60e193549f2fd0 (diff) | |
parent | ad5c251221bc87338741a38b7d0c1f5ccb57c7c1 (diff) | |
download | pymemcache-71de18c79d90ed9be30bd5dae8095c3d4334bca4.tar.gz |
Merge pull request #1 from pinterest/master
Merging latest commits
-rw-r--r-- | pymemcache/client/hash.py | 15 | ||||
-rw-r--r-- | pymemcache/test/test_client_hash.py | 19 | ||||
-rw-r--r-- | test-requirements.txt | 2 |
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 |