cachecontrol icon indicating copy to clipboard operation
cachecontrol copied to clipboard

HTTPResponse object has no attribute 'chunked'

Open scriptsrc opened this issue 8 years ago • 8 comments

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'

scriptsrc avatar Jan 06 '17 22:01 scriptsrc

@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?

ionrock avatar Jan 09 '17 15:01 ionrock

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).

sigmavirus24 avatar Jan 10 '17 19:01 sigmavirus24

@ionrock would you be amenable to a larger Travis CI testing matrix to test against older versions of requests?

sigmavirus24 avatar Jan 10 '17 19:01 sigmavirus24

@sigmavirus24 That sounds like a great idea to me!

ionrock avatar Jan 10 '17 22:01 ionrock

Any update on this?

kevgliss avatar Mar 30 '17 21:03 kevgliss

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.

elnuno avatar Apr 11 '17 18:04 elnuno

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.

keysmashes avatar Aug 20 '18 14:08 keysmashes

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?

erayerdin avatar Oct 22 '18 13:10 erayerdin