summaryrefslogtreecommitdiff
path: root/requests_cache
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook.git@proton.me>2022-08-14 19:02:18 -0500
committerJordan Cook <jordan.cook.git@proton.me>2022-08-23 14:36:40 -0500
commit5691838ac65bf7a3d80a66b4ae3b1fafb40b68a2 (patch)
tree92d8072427a4ae2918dca836635b566c3f23baf6 /requests_cache
parent4a9fb218999460636963b7c4b68e858d40fa6c71 (diff)
downloadrequests-cache-5691838ac65bf7a3d80a66b4ae3b1fafb40b68a2.tar.gz
Add method to recreate cache keys
Diffstat (limited to 'requests_cache')
-rw-r--r--requests_cache/backends/base.py12
-rw-r--r--requests_cache/backends/sqlite.py5
2 files changed, 17 insertions, 0 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py
index 2c5b0b6..9814799 100644
--- a/requests_cache/backends/base.py
+++ b/requests_cache/backends/base.py
@@ -203,6 +203,18 @@ class BaseCache:
):
yield response
+ def recreate_keys(self):
+ """Recreate cache keys for all previously cached responses"""
+ logger.debug('Recreating all cache keys')
+ old_keys = list(self.responses.keys())
+
+ for old_cache_key in old_keys:
+ response = self.responses[old_cache_key]
+ new_cache_key = self.create_key(response.request)
+ if new_cache_key != old_cache_key:
+ self.responses[new_cache_key] = response
+ del self.responses[old_cache_key]
+
def reset_expiration(self, expire_after: ExpirationTime = None):
"""Set a new expiration value to set on existing cache items
diff --git a/requests_cache/backends/sqlite.py b/requests_cache/backends/sqlite.py
index 17a34c2..cbfc296 100644
--- a/requests_cache/backends/sqlite.py
+++ b/requests_cache/backends/sqlite.py
@@ -120,6 +120,11 @@ class SQLiteCache(BaseCache):
else:
return super().filter(valid, expired, **kwargs)
+ def recreate_keys(self):
+ """A more efficient implementation of :py:meth:`BaseCache.recreate_keys`"""
+ with self.responses.bulk_commit():
+ super().recreate_keys()
+
def sorted(
self,
key: str = 'expires',