diff options
author | Jordan Cook <jordan.cook@pioneer.com> | 2021-04-03 14:13:13 -0500 |
---|---|---|
committer | Jordan Cook <jordan.cook@pioneer.com> | 2021-04-03 14:22:49 -0500 |
commit | 494daa1cb0a276c148b9baf05599f9d1baa01c4b (patch) | |
tree | bec3dc1424d00c4a24d5209bb2f2e0cf1e4d94f1 /examples | |
parent | ecf7dd2a3716f6eefc38b5f96ac14adf89c8f73a (diff) | |
download | requests-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.py | 44 |
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') |