summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2021-04-03 14:13:13 -0500
committerJordan Cook <jordan.cook@pioneer.com>2021-04-03 14:22:49 -0500
commit494daa1cb0a276c148b9baf05599f9d1baa01c4b (patch)
treebec3dc1424d00c4a24d5209bb2f2e0cf1e4d94f1 /examples
parentecf7dd2a3716f6eefc38b5f96ac14adf89c8f73a (diff)
downloadrequests-cache-494daa1cb0a276c148b9baf05599f9d1baa01c4b.tar.gz
Add example script to convert an existing cache from previous serialization format to new one
Diffstat (limited to 'examples')
-rw-r--r--examples/convert_cache.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/examples/convert_cache.py b/examples/convert_cache.py
new file mode 100644
index 0000000..ce4f18f
--- /dev/null
+++ b/examples/convert_cache.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+"""Example of converting data cached in older versions of requests-cache (<=0.5.2)
+into the current format
+"""
+from requests import Response
+from requests_cache import CachedResponse, CachedSession
+import requests_cache.backends.base
+
+
+class _Store:
+ pass
+
+
+# Add placeholder object used by pickle to deserialize old responses
+requests_cache.backends.base._Store = _Store
+requests_cache.backends.base._RawStore = _Store
+
+
+def convert_old_response(cached_response, timestamp):
+ temp_response = Response()
+ for field in Response.__attrs__:
+ setattr(temp_response, field, getattr(cached_response, field, None))
+
+ new_response = CachedResponse(temp_response)
+ new_response.created_at = timestamp
+ return new_response
+
+
+def convert_cache(*args, **kwargs):
+ session = CachedSession(*args, **kwargs)
+ print(f'Checking {len(session.cache.responses)} cached responses')
+
+ with session.cache.responses.bulk_commit():
+ for key, response in session.cache.responses.items():
+ if isinstance(response, tuple):
+ print(f'Converting response {key}')
+ session.cache.responses[key] = convert_old_response(*response)
+
+ print('Conversion complete')
+
+
+# Example: convert a cache named 'demo_cache.sqlite' in the current directory
+if __name__ == '__main__':
+ convert_cache('demo_cache', backend='sqlite')