#!/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 import requests_cache.backends.base from requests_cache import CachedResponse, CachedSession 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.sqlite')