From 5691838ac65bf7a3d80a66b4ae3b1fafb40b68a2 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Sun, 14 Aug 2022 19:02:18 -0500 Subject: Add method to recreate cache keys --- requests_cache/backends/base.py | 12 ++++++++++++ requests_cache/backends/sqlite.py | 5 +++++ 2 files changed, 17 insertions(+) (limited to 'requests_cache') 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', -- cgit v1.2.1