diff options
author | Jason Biegel <jason.biegel@shopspring.com> | 2017-02-03 10:20:50 -0500 |
---|---|---|
committer | Jason Biegel <jason.biegel@shopspring.com> | 2017-02-17 15:30:58 -0500 |
commit | 0b2ffffbd3efb626236bf215ec73179aee1f0843 (patch) | |
tree | 9d7b0529506224969276448e386fd369d9e8a331 | |
parent | 0b3295798fd814ade5df7a14ac617a91ca81ef20 (diff) | |
download | pymemcache-0b2ffffbd3efb626236bf215ec73179aee1f0843.tar.gz |
Add gets_many to HashClient.
-rw-r--r-- | pymemcache/client/hash.py | 15 | ||||
-rw-r--r-- | pymemcache/test/test_client_hash.py | 19 |
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( |