cachecontrol
cachecontrol copied to clipboard
HTTPResponse object has no attribute 'chunked'
Is this a known issue? Any workarounds?
> pip freeze | grep -i cache
CacheControl==0.11.7
requests-cache==0.4.13
> pip freeze | grep -i requests
requests==2.6.0
requests-cache==0.4.13
# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> from cachecontrol import CacheControl
>>> sess = requests.session()
>>> cached_sess = CacheControl(sess)
>>> response = cached_sess.get('http://google.com')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/apps/python/local/lib/python2.7/site-packages/requests/sessions.py", line 476, in get
return self.request('GET', url, **kwargs)
File "/apps/python/local/lib/python2.7/site-packages/requests/sessions.py", line 464, in request
resp = self.send(prep, **send_kwargs)
File "/apps/python/local/lib/python2.7/site-packages/requests/sessions.py", line 602, in send
history = [resp for resp in gen] if allow_redirects else []
File "/apps/python/local/lib/python2.7/site-packages/requests/sessions.py", line 195, in resolve_redirects
allow_redirects=False,
File "/apps/python/local/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/apps/python/local/lib/python2.7/site-packages/cachecontrol/adapter.py", line 47, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/apps/python/local/lib/python2.7/site-packages/requests/adapters.py", line 437, in send
return self.build_response(request, resp)
File "/apps/python/local/lib/python2.7/site-packages/cachecontrol/adapter.py", line 100, in build_response
if response.chunked:
AttributeError: 'HTTPResponse' object has no attribute 'chunked'
@monkeysecurity I believe this is due to a new version of requests. I'm pretty sure @sigmavirus24 might have hit it as well. I unfortunately don't have time to dig into it at the moment.
@sigmavirus24 Did you have a fix for this already related to another PR / Issue?
I have a fix somewhere. Just need some time to dig it up. I suspect, however, that this is a problem with older versions of requests (which use older versions of urllib3 which didn't have this attribute).
@ionrock would you be amenable to a larger Travis CI testing matrix to test against older versions of requests?
@sigmavirus24 That sounds like a great idea to me!
Any update on this?
The fix is trivial: edit if response.chunked: to if hasattr(response, 'chunked') and response.chunked: in line 100 of cachecontrol/adapter.py. Added as a PR.
Until this is fixed: urllib3 supports HTTPResponse.chunked since https://github.com/urllib3/urllib3/commit/f21c2a2b73e4256ba2787f8470dbee6872987d2d (1.10.3), and Requests vendors that version of urllib3 since https://github.com/requests/requests/commit/5fcd843eb23e8e84cd5f60c6d372ef4d678f80fe (2.6.1). So, installing/depending on requests >= 2.6.1 will fix the issue.
The issue still persists on master adapter.py. Some really have problems with it and there's not much solutions on the internet.
I can say elnuno's PR works. I just changed the line and it works. Will it be merged yet?