summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Reifschneider <jafo00@gmail.com>2023-04-15 18:10:58 -0600
committerGitHub <noreply@github.com>2023-04-15 18:10:58 -0600
commit6daa72751273c3a4bde9319adc9d0cc91ff32b31 (patch)
treea7bfab48f6d82ae83cbc6aafae8aa4564ad88440
parent511604b5e829962b1dc40132cd84ea629e141c32 (diff)
parentf6672ee3139ed64f6a97e50e87f4431356cf4a91 (diff)
downloadpython-memcached-6daa72751273c3a4bde9319adc9d0cc91ff32b31.tar.gz
Merge pull request #158 from samupl/support_default
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 06f1efb..09cac56 100644
--- a/memcache.py
+++ b/memcache.py
@@ -1064,7 +1064,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)
@@ -1093,7 +1093,7 @@ class Client(threading.local):
)
if not rkey:
- return None
+ return default
try:
value = self._recv_value(server, flags, rlen)
finally:
@@ -1118,12 +1118,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 621ac5c..d0f4857 100644
--- a/tests/test_memcache.py
+++ b/tests/test_memcache.py
@@ -54,6 +54,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):