diff options
author | Joe Gordon <jogo@pinterest.com> | 2017-03-24 16:39:33 -0700 |
---|---|---|
committer | Joe Gordon <jogo@pinterest.com> | 2017-03-29 11:04:31 -0700 |
commit | 7351bdb331c32e42ce817ffad216dc875b25b912 (patch) | |
tree | 5042cb96d761433b302d527417748857c3c977b0 /pymemcache/client/base.py | |
parent | 082f0745421a10bf834759e87ef46c2212698ec4 (diff) | |
download | pymemcache-7351bdb331c32e42ce817ffad216dc875b25b912.tar.gz |
Add support for stats cachedump
Stats cachedump has a different input and output format compared to
most stats commands. Previously this would fail with a cryptic error.
Fixes issue #103
Diffstat (limited to 'pymemcache/client/base.py')
-rw-r--r-- | pymemcache/client/base.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/pymemcache/client/base.py b/pymemcache/client/base.py index 3578058..6c47ffd 100644 --- a/pymemcache/client/base.py +++ b/pymemcache/client/base.py @@ -705,8 +705,14 @@ class Client(object): raise MemcacheServerError(error) def _fetch_cmd(self, name, keys, expect_cas): - checked_keys = dict((self.check_key(k), k) for k in keys) - cmd = name + b' ' + b' '.join(checked_keys) + b'\r\n' + if name == b'stats': + # stats commands can have multiple arguments + # `stats cachedump 1 1` + checked_keys = [self.check_key(k) for k in keys] + cmd = name + b' ' + b' '.join(checked_keys) + b'\r\n' + else: + checked_keys = dict((self.check_key(k), k) for k in keys) + cmd = name + b' ' + b' '.join(checked_keys) + b'\r\n' try: if not self.sock: @@ -744,6 +750,10 @@ class Client(object): elif name == b'stats' and line.startswith(b'STAT'): key_value = line.split() result[key_value[1]] = key_value[2] + elif name == b'stats' and line.startswith(b'ITEM'): + # For 'stats cachedump' commands + key_value = line.split() + result[key_value[1]] = b' '.join(key_value[2:]) else: raise MemcacheUnknownError(line[:32]) except Exception: |