import re
import gzip
+import httplib
try:
import json
self.uri = uri
self.format = format
self.uriparts = uriparts
+ try:
+ data = self.e.fp.read()
+ except httplib.IncompleteRead, e:
+ # can't read the error text
+ # let's try some of it
+ data = e.partial
if self.e.headers['Content-Encoding'] == 'gzip':
- buf = StringIO(self.e.fp.read())
+ buf = StringIO(data)
f = gzip.GzipFile(fileobj=buf)
self.response_data = f.read()
else:
- self.response_data = self.e.fp.read()
+ self.response_data = data
def __str__(self):
fmt = ("." + self.format) if self.format else ""
handle = urllib_request.urlopen(req, **kwargs)
if handle.headers['Content-Type'] in ['image/jpeg', 'image/png']:
return handle
- elif handle.info().get('Content-Encoding') == 'gzip':
+ try:
+ data = handle.read()
+ except httplib.IncompleteRead, e:
+ # Even if we don't get all the bytes we should have there
+ # may be a complete response in e.partial
+ data = e.partial
+ if handle.info().get('Content-Encoding') == 'gzip':
# Handle gzip decompression
- buf = StringIO(handle.read())
+ buf = StringIO(data)
f = gzip.GzipFile(fileobj=buf)
data = f.read()
- else:
- data = handle.read()
-
if "json" == self.format:
res = json.loads(data.decode('utf8'))
return wrap_response(res, handle.headers)