summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Szafrański <s@samu.pl>2019-02-12 12:51:29 +0100
committerJakub Szafrański <s@samu.pl>2019-02-12 13:00:55 +0100
commit2439d0a8d7e48750d7b73a0e8da9a3571f6617cc (patch)
tree542f2591eb9a0caa5f78a3a620110d4a0475dab1
parentbad41222379102e3f18f6f2f7be3ee608de6fbff (diff)
downloadpython-memcached-2439d0a8d7e48750d7b73a0e8da9a3571f6617cc.tar.gz
Add support for default value in get
-rw-r--r--memcache.py8
-rw-r--r--tests/test_memcache.py14
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):