diff options
author | eran.kornblau <eran.kornblau@kaltura.com> | 2014-01-28 09:54:56 +0200 |
---|---|---|
committer | eran.kornblau <eran.kornblau@kaltura.com> | 2014-01-28 09:54:56 +0200 |
commit | f769de86d9722d7e3ffda3a52354c9613d93151f (patch) | |
tree | 8501734ca62b7a38c07ab762196e4731509b44a8 | |
parent | 794b02811d8c6fdad304955a4602fb1324270f95 (diff) | |
download | python-memcached-f769de86d9722d7e3ffda3a52354c9613d93151f.tar.gz |
add support for touch command
-rw-r--r-- | memcache.py | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/memcache.py b/memcache.py index db8e632..f0f7777 100644 --- a/memcache.py +++ b/memcache.py @@ -438,23 +438,39 @@ class Client(local): should fail. Defaults to None for no delay. @rtype: int ''' + return self._deletetouch(['DELETED','NOT_FOUND'], "delete", key, time) + + def touch(self, key, time=0): + '''Updates the expiration time of a key in memcache. + + @return: Nonzero on success. + @param time: Tells memcached the time which this value should + expire, either as a delta number of seconds, or an absolute + unix time-since-the-epoch value. See the memcached protocol + docs section "Storage Commands" for more info on <exptime>. We + default to 0 == cache forever. + @rtype: int + ''' + return self._deletetouch(['TOUCHED'], "touch", key, time) + + def _deletetouch(self, expected, cmd, key, time=0): if self.do_check_key: self.check_key(key) server, key = self._get_server(key) if not server: return 0 - self._statlog('delete') + self._statlog(cmd) if time != None and time != 0: - cmd = "delete %s %d" % (key, time) + cmd = "%s %s %d" % (cmd, key, time) else: - cmd = "delete %s" % key + cmd = "%s %s" % (cmd, key) try: server.send_cmd(cmd) line = server.readline() - if line and line.strip() in ['DELETED', 'NOT_FOUND']: return 1 - self.debuglog('Delete expected DELETED or NOT_FOUND, got: %s' - % repr(line)) + if line and line.strip() in expected: return 1 + self.debuglog('%s expected %s, got: %s' + % (cmd, ' or '.join(expected), repr(line))) except socket.error, msg: if isinstance(msg, tuple): msg = msg[1] server.mark_dead(msg) |