2014-03-27 17:06:03 -04:00
|
|
|
import requests
|
|
|
|
|
|
|
|
from requests import models
|
|
|
|
from requests.packages.urllib3.response import HTTPResponse
|
|
|
|
|
|
|
|
__attrs__ = [
|
|
|
|
'_content',
|
|
|
|
'status_code',
|
|
|
|
'headers',
|
|
|
|
'url',
|
|
|
|
'history',
|
|
|
|
'encoding',
|
|
|
|
'reason',
|
|
|
|
'cookies',
|
|
|
|
'elapsed',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def response_getstate(self):
|
|
|
|
# consume everything
|
|
|
|
if not self._content_consumed:
|
|
|
|
self.content
|
|
|
|
|
|
|
|
state = dict(
|
|
|
|
(attr, getattr(self, attr, None))
|
|
|
|
for attr in __attrs__
|
|
|
|
)
|
|
|
|
|
|
|
|
# deal with our raw content b/c we need it for our cookie jar
|
|
|
|
state['raw_original_response'] = self.raw._original_response
|
|
|
|
return state
|
|
|
|
|
|
|
|
|
|
|
|
def response_setstate(self, state):
|
|
|
|
for name, value in state.items():
|
|
|
|
if name != 'raw_original_response':
|
|
|
|
setattr(self, name, value)
|
|
|
|
|
|
|
|
setattr(self, 'raw', HTTPResponse())
|
|
|
|
self.raw._original_response = state['raw_original_response']
|
|
|
|
|
|
|
|
|
|
|
|
def make_responses_pickleable():
|
|
|
|
try:
|
|
|
|
version_parts = [int(part) for part in requests.__version__.split('.')]
|
|
|
|
|
|
|
|
# must be >= 2.2.x
|
|
|
|
if not version_parts[0] >= 2 or not version_parts[1] >= 2:
|
|
|
|
models.Response.__getstate__ = response_getstate
|
|
|
|
models.Response.__setstate__ = response_setstate
|
|
|
|
except:
|
|
|
|
raise
|
|
|
|
pass
|
|
|
|
|
2014-04-23 02:24:08 -04:00
|
|
|
|
2014-03-30 00:54:23 -04:00
|
|
|
make_responses_pickleable()
|