| Index: third_party/google-endpoints/requests/packages/urllib3/util/response.py
|
| diff --git a/third_party/google-endpoints/requests/packages/urllib3/util/response.py b/third_party/google-endpoints/requests/packages/urllib3/util/response.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..67cf730ab0f04881946d6f616aa52e4e3c5a82f6
|
| --- /dev/null
|
| +++ b/third_party/google-endpoints/requests/packages/urllib3/util/response.py
|
| @@ -0,0 +1,81 @@
|
| +from __future__ import absolute_import
|
| +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.
|
| +
|
| + :param obj:
|
| + The file-like object to check.
|
| + """
|
| +
|
| + try:
|
| + # Check `isclosed()` first, in case Python3 doesn't set `closed`.
|
| + # GH Issue #928
|
| + return obj.isclosed()
|
| + except AttributeError:
|
| + pass
|
| +
|
| + try:
|
| + # Check via the official file-like-object way.
|
| + return obj.closed
|
| + except AttributeError:
|
| + pass
|
| +
|
| + try:
|
| + # Check if the object is a container for another file-like object that
|
| + # gets released on exhaustion (e.g. HTTPResponse).
|
| + return obj.fp is None
|
| + except AttributeError:
|
| + 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 {0}.'.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 whether 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'
|
|
|