summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Haritonov <reclosedev@gmail.com>2014-12-06 10:36:03 +0300
committerRoman Haritonov <reclosedev@gmail.com>2014-12-06 10:36:03 +0300
commit76289829923c1012352afe42698caf99c5a75785 (patch)
treed78c7c96c7fa31a1d5bea41d0e6f830be86dc046
parent28e0aa798aa5d21e524897b558d27ba57aec4f6e (diff)
downloadrequests-cache-76289829923c1012352afe42698caf99c5a75785.tar.gz
Fix response history handling for requests 2.5.0
-rw-r--r--requests_cache/backends/base.py22
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):