summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authordaniel a rios <misterrios@gmail.com>2019-10-08 11:02:40 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-14 11:14:11 +0100
commitefc3e32d6d7fb9bb41be73b80c8607b653c1fbd6 (patch)
treefff79e28232a2d8088aee861606c924424771395 /django
parent6e99585c19290fb9bec502cac8210041fdb28484 (diff)
Fixed #30759 -- Made cache.delete() return whether it succeeded.
Thanks Simon Charette for the review.
Diffstat (limited to 'django')
-rw-r--r--django/core/cache/backends/base.py3
-rw-r--r--django/core/cache/backends/db.py6
-rw-r--r--django/core/cache/backends/dummy.py1
-rw-r--r--django/core/cache/backends/filebased.py7
-rw-r--r--django/core/cache/backends/locmem.py5
-rw-r--r--django/core/cache/backends/memcached.py9
6 files changed, 22 insertions, 9 deletions
diff --git a/django/core/cache/backends/base.py b/django/core/cache/backends/base.py
index b3a65ab40f..cf9629bc03 100644
--- a/django/core/cache/backends/base.py
+++ b/django/core/cache/backends/base.py
@@ -132,7 +132,8 @@ class BaseCache:
def delete(self, key, version=None):
"""
- Delete a key from the cache, failing silently.
+ Delete a key from the cache and return whether it succeeded, failing
+ silently.
"""
raise NotImplementedError('subclasses of BaseCache must provide a delete() method')
diff --git a/django/core/cache/backends/db.py b/django/core/cache/backends/db.py
index 17b5209659..33c79c5a14 100644
--- a/django/core/cache/backends/db.py
+++ b/django/core/cache/backends/db.py
@@ -197,7 +197,8 @@ class DatabaseCache(BaseDatabaseCache):
return True
def delete(self, key, version=None):
- self.delete_many([key], version)
+ self.validate_key(key)
+ return self._base_delete_many([self.make_key(key, version)])
def delete_many(self, keys, version=None):
key_list = []
@@ -208,7 +209,7 @@ class DatabaseCache(BaseDatabaseCache):
def _base_delete_many(self, keys):
if not keys:
- return
+ return False
db = router.db_for_write(self.cache_model_class)
connection = connections[db]
@@ -224,6 +225,7 @@ class DatabaseCache(BaseDatabaseCache):
),
keys,
)
+ return bool(cursor.rowcount)
def has_key(self, key, version=None):
key = self.make_key(key, version=version)
diff --git a/django/core/cache/backends/dummy.py b/django/core/cache/backends/dummy.py
index 942b72ef89..3913746c49 100644
--- a/django/core/cache/backends/dummy.py
+++ b/django/core/cache/backends/dummy.py
@@ -28,6 +28,7 @@ class DummyCache(BaseCache):
def delete(self, key, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
+ return False
def has_key(self, key, version=None):
key = self.make_key(key, version=version)
diff --git a/django/core/cache/backends/filebased.py b/django/core/cache/backends/filebased.py
index 48b8df90ab..3d76f0371b 100644
--- a/django/core/cache/backends/filebased.py
+++ b/django/core/cache/backends/filebased.py
@@ -76,16 +76,17 @@ class FileBasedCache(BaseCache):
return False
def delete(self, key, version=None):
- self._delete(self._key_to_file(key, version))
+ return self._delete(self._key_to_file(key, version))
def _delete(self, fname):
if not fname.startswith(self._dir) or not os.path.exists(fname):
- return
+ return False
try:
os.remove(fname)
except FileNotFoundError:
# The file may have been removed by another process.
- pass
+ return False
+ return True
def has_key(self, key, version=None):
fname = self._key_to_file(key, version)
diff --git a/django/core/cache/backends/locmem.py b/django/core/cache/backends/locmem.py
index 6058bf5f7e..2573d14497 100644
--- a/django/core/cache/backends/locmem.py
+++ b/django/core/cache/backends/locmem.py
@@ -108,13 +108,14 @@ class LocMemCache(BaseCache):
del self._cache[key]
del self._expire_info[key]
except KeyError:
- pass
+ return False
+ return True
def delete(self, key, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
with self._lock:
- self._delete(key)
+ return self._delete(key)
def clear(self):
with self._lock:
diff --git a/django/core/cache/backends/memcached.py b/django/core/cache/backends/memcached.py
index 48cfb8310b..8202005045 100644
--- a/django/core/cache/backends/memcached.py
+++ b/django/core/cache/backends/memcached.py
@@ -78,7 +78,7 @@ class BaseMemcachedCache(BaseCache):
def delete(self, key, version=None):
key = self.make_key(key, version=version)
- self._cache.delete(key)
+ return bool(self._cache.delete(key))
def get_many(self, keys, version=None):
key_map = {self.make_key(key, version=version): key for key in keys}
@@ -170,6 +170,13 @@ class MemcachedCache(BaseMemcachedCache):
return default
return val
+ def delete(self, key, version=None):
+ # python-memcached's delete() returns True when key doesn't exist.
+ # https://github.com/linsomniac/python-memcached/issues/170
+ # Call _deletetouch() without the NOT_FOUND in expected results.
+ key = self.make_key(key, version=version)
+ return bool(self._cache._deletetouch([b'DELETED'], 'delete', key))
+
class PyLibMCCache(BaseMemcachedCache):
"An implementation of a cache binding using pylibmc"