diff options
| author | daniel a rios <misterrios@gmail.com> | 2019-10-08 11:02:40 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-11-14 11:14:11 +0100 |
| commit | efc3e32d6d7fb9bb41be73b80c8607b653c1fbd6 (patch) | |
| tree | fff79e28232a2d8088aee861606c924424771395 /django | |
| parent | 6e99585c19290fb9bec502cac8210041fdb28484 (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.py | 3 | ||||
| -rw-r--r-- | django/core/cache/backends/db.py | 6 | ||||
| -rw-r--r-- | django/core/cache/backends/dummy.py | 1 | ||||
| -rw-r--r-- | django/core/cache/backends/filebased.py | 7 | ||||
| -rw-r--r-- | django/core/cache/backends/locmem.py | 5 | ||||
| -rw-r--r-- | django/core/cache/backends/memcached.py | 9 |
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" |
