diff options
author | Roman Haritonov <reclosedev@gmail.com> | 2014-12-06 10:36:03 +0300 |
---|---|---|
committer | Roman Haritonov <reclosedev@gmail.com> | 2014-12-06 10:36:03 +0300 |
commit | 76289829923c1012352afe42698caf99c5a75785 (patch) | |
tree | d78c7c96c7fa31a1d5bea41d0e6f830be86dc046 | |
parent | 28e0aa798aa5d21e524897b558d27ba57aec4f6e (diff) | |
download | requests-cache-76289829923c1012352afe42698caf99c5a75785.tar.gz |
Fix response history handling for requests 2.5.0
-rw-r--r-- | requests_cache/backends/base.py | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/requests_cache/backends/base.py b/requests_cache/backends/base.py index 2843ea8..3645754 100644 --- a/requests_cache/backends/base.py +++ b/requests_cache/backends/base.py @@ -116,15 +116,22 @@ class BaseCache(object): _raw_response_attrs = ['_original_response', 'decode_content', 'headers', 'reason', 'status', 'strict', 'version'] - def reduce_response(self, response): + def reduce_response(self, response, seen=None): """ Reduce response object to make it compatible with ``pickle`` """ + if seen is None: + seen = {} + try: + return seen[id(response)] + except KeyError: + pass result = _Store() # prefetch response.content for field in self._response_attrs: setattr(result, field, self._picklable_field(response, field)) - result.history = tuple(self.reduce_response(r) for r in response.history) + seen[id(response)] = result + result.history = tuple(self.reduce_response(r, seen) for r in response.history) return result def _picklable_field(self, response, name): @@ -139,13 +146,20 @@ class BaseCache(object): value = result return value - def restore_response(self, response): + def restore_response(self, response, seen=None): """ Restore response object after unpickling """ + if seen is None: + seen = {} + try: + return seen[id(response)] + except KeyError: + pass result = requests.Response() for field in self._response_attrs: setattr(result, field, getattr(response, field, None)) - result.history = tuple(self.restore_response(r) for r in response.history) + seen[id(response)] = result + result.history = tuple(self.restore_response(r, seen) for r in response.history) return result def create_key(self, request): |