aboutsummaryrefslogtreecommitdiff
path: root/requests/packages/urllib3/util/response.py
diff options
context:
space:
mode:
authorDaniele Tricoli <eriol@mornie.org>2015-10-14 19:05:05 +0200
committerDaniele Tricoli <eriol@mornie.org>2015-10-14 19:05:05 +0200
commitd01fda0eb2b8256cc36b77bb586ba6bc7c58c561 (patch)
tree9388f02824df07bcbe014f6fe801a0b1b23d6c07 /requests/packages/urllib3/util/response.py
parent4ded421c898253557a3bb0147a2bfc8c85583db8 (diff)
parent3d3afa49b9ca0e898ecb09c7271d28e0c737016b (diff)
downloadpython-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.py51
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'