From: Cory Benfield Date: Sun, 28 Jul 2013 06:42:17 +0000 (+0100) Subject: Wrap IncompleteRead in ChunkedEncodingError. X-Git-Tag: 2.0~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=79f3e69f5eecdcd2dc09b234d72305a180f149d3;p=services%2Fpython-requests.git Wrap IncompleteRead in ChunkedEncodingError. --- diff --git a/requests/compat.py b/requests/compat.py index e5f6e1d..0d61a57 100644 --- a/requests/compat.py +++ b/requests/compat.py @@ -90,6 +90,7 @@ if is_py2: from Cookie import Morsel from StringIO import StringIO from .packages.urllib3.packages.ordered_dict import OrderedDict + from httplib import IncompleteRead builtin_str = str bytes = str @@ -105,6 +106,7 @@ elif is_py3: from http.cookies import Morsel from io import StringIO from collections import OrderedDict + from http.client import IncompleteRead builtin_str = str str = str diff --git a/requests/exceptions.py b/requests/exceptions.py index c0588f6..63f2c9c 100644 --- a/requests/exceptions.py +++ b/requests/exceptions.py @@ -53,3 +53,7 @@ class InvalidSchema(RequestException, ValueError): class InvalidURL(RequestException, ValueError): """ The URL provided was somehow invalid. """ + + +class ChunkedEncodingError(RequestException): + """The server declared chunked encoding but sent an invalid chunk.""" diff --git a/requests/models.py b/requests/models.py index 2439153..ab3af67 100644 --- a/requests/models.py +++ b/requests/models.py @@ -19,14 +19,16 @@ from .auth import HTTPBasicAuth from .cookies import cookiejar_from_dict, get_cookie_header from .packages.urllib3.filepost import encode_multipart_formdata from .packages.urllib3.util import parse_url -from .exceptions import HTTPError, RequestException, MissingSchema, InvalidURL +from .exceptions import ( + HTTPError, RequestException, MissingSchema, InvalidURL, + ChunkedEncodingError) from .utils import ( guess_filename, get_auth_from_url, requote_uri, stream_decode_response_unicode, to_key_val_list, parse_header_links, iter_slices, guess_json_utf, super_len) from .compat import ( cookielib, urlunparse, urlsplit, urlencode, str, bytes, StringIO, - is_py2, chardet, json, builtin_str, basestring) + is_py2, chardet, json, builtin_str, basestring, IncompleteRead) CONTENT_CHUNK_SIZE = 10 * 1024 ITER_CHUNK_SIZE = 512 @@ -547,8 +549,12 @@ class Response(object): def generate(): try: # Special case for urllib3. - for chunk in self.raw.stream(chunk_size, decode_content=True): - yield chunk + try: + for chunk in self.raw.stream(chunk_size, + decode_content=True): + yield chunk + except IncompleteRead as e: + raise ChunkedEncodingError(e) except AttributeError: # Standard file-like object. while 1: