summaryrefslogtreecommitdiff
path: root/requests_cache/backends/base.py
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2022-04-10 15:39:08 -0500
committerJordan Cook <jordan.cook@pioneer.com>2022-04-10 17:54:53 -0500
commit91ac4fdd7d3ca5853d5362d4352bda896220681c (patch)
tree75f39070cb9794241aeb3823dee1b8f72b8e8361 /requests_cache/backends/base.py
parentb96d9ed4b615e4f6c9d6b4db6679fb843c5319e7 (diff)
downloadrequests-cache-91ac4fdd7d3ca5853d5362d4352bda896220681c.tar.gz
WIP: Add faster implementation of removing invalid redirects in SQL
Diffstat (limited to 'requests_cache/backends/base.py')
-rw-r--r--requests_cache/backends/base.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py
index 472ba9f..7f44af4 100644
--- a/requests_cache/backends/base.py
+++ b/requests_cache/backends/base.py
@@ -96,13 +96,6 @@ class BaseCache:
for r in response.history:
self.redirects[self.create_key(r.request)] = cache_key
- def bulk_delete(self, keys: Iterable[str]):
- """Remove multiple responses and their associated redirects from the cache"""
- self.responses.bulk_delete(keys)
- # Remove any redirects that no longer point to an existing response
- invalid_redirects = [k for k, v in self.redirects.items() if v not in self.responses]
- self.redirects.bulk_delete(set(keys) | set(invalid_redirects))
-
def clear(self):
"""Delete all items from the cache"""
logger.info('Clearing all items from the cache')
@@ -187,6 +180,16 @@ class BaseCache:
for key, response in keys_to_update.items():
self.responses[key] = response
+ def bulk_delete(self, keys: Iterable[str]):
+ """Remove multiple responses and their associated redirects from the cache"""
+ self.responses.bulk_delete(keys)
+ self.remove_invalid_redirects()
+
+ def remove_invalid_redirects(self):
+ """Remove any redirects that no longer point to an existing response"""
+ invalid_redirects = [k for k, v in self.redirects.items() if v not in self.responses]
+ self.redirects.bulk_delete(invalid_redirects)
+
def response_count(self, check_expiry=False) -> int:
"""Get the number of responses in the cache, excluding invalid (unusable) responses.
Can also optionally exclude expired responses.