diff options
author | Daniele Tricoli <eriol@mornie.org> | 2015-10-14 19:05:05 +0200 |
---|---|---|
committer | Daniele Tricoli <eriol@mornie.org> | 2015-10-14 19:05:05 +0200 |
commit | d01fda0eb2b8256cc36b77bb586ba6bc7c58c561 (patch) | |
tree | 9388f02824df07bcbe014f6fe801a0b1b23d6c07 /requests/packages/urllib3/util/response.py | |
parent | 4ded421c898253557a3bb0147a2bfc8c85583db8 (diff) | |
parent | 3d3afa49b9ca0e898ecb09c7271d28e0c737016b (diff) | |
download | python-requests-d01fda0eb2b8256cc36b77bb586ba6bc7c58c561.tar python-requests-d01fda0eb2b8256cc36b77bb586ba6bc7c58c561.tar.gz |
merge patched into master
Diffstat (limited to 'requests/packages/urllib3/util/response.py')
-rw-r--r-- | requests/packages/urllib3/util/response.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/requests/packages/urllib3/util/response.py b/requests/packages/urllib3/util/response.py index 45fff55..2c1de15 100644 --- a/requests/packages/urllib3/util/response.py +++ b/requests/packages/urllib3/util/response.py @@ -1,3 +1,8 @@ +from ..packages.six.moves import http_client as httplib + +from ..exceptions import HeaderParsingError + + def is_fp_closed(obj): """ Checks whether a given file-like object is closed. @@ -20,3 +25,49 @@ def is_fp_closed(obj): pass raise ValueError("Unable to determine whether fp is closed.") + + +def assert_header_parsing(headers): + """ + Asserts whether all headers have been successfully parsed. + Extracts encountered errors from the result of parsing headers. + + Only works on Python 3. + + :param headers: Headers to verify. + :type headers: `httplib.HTTPMessage`. + + :raises urllib3.exceptions.HeaderParsingError: + If parsing errors are found. + """ + + # This will fail silently if we pass in the wrong kind of parameter. + # To make debugging easier add an explicit check. + if not isinstance(headers, httplib.HTTPMessage): + raise TypeError('expected httplib.Message, got {}.'.format( + type(headers))) + + defects = getattr(headers, 'defects', None) + get_payload = getattr(headers, 'get_payload', None) + + unparsed_data = None + if get_payload: # Platform-specific: Python 3. + unparsed_data = get_payload() + + if defects or unparsed_data: + raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) + + +def is_response_to_head(response): + """ + Checks, wether a the request of a response has been a HEAD-request. + Handles the quirks of AppEngine. + + :param conn: + :type conn: :class:`httplib.HTTPResponse` + """ + # FIXME: Can we do this somehow without accessing private httplib _method? + method = response._method + if isinstance(method, int): # Platform-specific: Appengine + return method == 3 + return method.upper() == 'HEAD' |