diff options
author | Jakub Szafrański <s@samu.pl> | 2019-02-12 12:51:29 +0100 |
---|---|---|
committer | Jakub Szafrański <s@samu.pl> | 2019-02-12 13:00:55 +0100 |
commit | 2439d0a8d7e48750d7b73a0e8da9a3571f6617cc (patch) | |
tree | 542f2591eb9a0caa5f78a3a620110d4a0475dab1 | |
parent | bad41222379102e3f18f6f2f7be3ee608de6fbff (diff) | |
download | python-memcached-2439d0a8d7e48750d7b73a0e8da9a3571f6617cc.tar.gz |
Add support for default value in get
-rw-r--r-- | memcache.py | 8 | ||||
-rw-r--r-- | tests/test_memcache.py | 14 |
2 files changed, 18 insertions, 4 deletions
diff --git a/memcache.py b/memcache.py index 05b6657..bf0feac 100644 --- a/memcache.py +++ b/memcache.py @@ -1059,7 +1059,7 @@ class Client(threading.local): server.mark_dead(msg) return 0 - def _get(self, cmd, key): + def _get(self, cmd, key, default=None): key = self._encode_key(key) if self.do_check_key: self.check_key(key) @@ -1088,7 +1088,7 @@ class Client(threading.local): ) if not rkey: - return None + return default try: value = self._recv_value(server, flags, rlen) finally: @@ -1113,12 +1113,12 @@ class Client(threading.local): server.mark_dead(msg) return None - def get(self, key): + def get(self, key, default=None): '''Retrieves a key from the memcache. @return: The value or None. ''' - return self._get('get', key) + return self._get('get', key, default) def gets(self, key): '''Retrieves a key from the memcache. Used in conjunction with 'cas'. diff --git a/tests/test_memcache.py b/tests/test_memcache.py index 40b6524..4cdf7a6 100644 --- a/tests/test_memcache.py +++ b/tests/test_memcache.py @@ -51,6 +51,20 @@ class TestMemcache(unittest.TestCase): self.assertEqual(result, True) self.assertEqual(self.mc.get("long"), None) + def test_default(self): + key = "default" + default = object() + result = self.mc.get(key, default=default) + self.assertEqual(result, default) + + self.mc.set("default", None) + result = self.mc.get(key, default=default) + self.assertIsNone(result) + + self.mc.set("default", 123) + result = self.mc.get(key, default=default) + self.assertEqual(result, 123) + @mock.patch.object(_Host, 'send_cmd') @mock.patch.object(_Host, 'readline') def test_touch(self, mock_readline, mock_send_cmd): |