Path: blob/master/venv/Lib/site-packages/urllib3/util/response.py
811 views
from __future__ import absolute_import1from ..packages.six.moves import http_client as httplib23from ..exceptions import HeaderParsingError456def is_fp_closed(obj):7"""8Checks whether a given file-like object is closed.910:param obj:11The file-like object to check.12"""1314try:15# Check `isclosed()` first, in case Python3 doesn't set `closed`.16# GH Issue #92817return obj.isclosed()18except AttributeError:19pass2021try:22# Check via the official file-like-object way.23return obj.closed24except AttributeError:25pass2627try:28# Check if the object is a container for another file-like object that29# gets released on exhaustion (e.g. HTTPResponse).30return obj.fp is None31except AttributeError:32pass3334raise ValueError("Unable to determine whether fp is closed.")353637def assert_header_parsing(headers):38"""39Asserts whether all headers have been successfully parsed.40Extracts encountered errors from the result of parsing headers.4142Only works on Python 3.4344:param headers: Headers to verify.45:type headers: `httplib.HTTPMessage`.4647:raises urllib3.exceptions.HeaderParsingError:48If parsing errors are found.49"""5051# This will fail silently if we pass in the wrong kind of parameter.52# To make debugging easier add an explicit check.53if not isinstance(headers, httplib.HTTPMessage):54raise TypeError("expected httplib.Message, got {0}.".format(type(headers)))5556defects = getattr(headers, "defects", None)57get_payload = getattr(headers, "get_payload", None)5859unparsed_data = None60if get_payload:61# get_payload is actually email.message.Message.get_payload;62# we're only interested in the result if it's not a multipart message63if not headers.is_multipart():64payload = get_payload()6566if isinstance(payload, (bytes, str)):67unparsed_data = payload6869if defects or unparsed_data:70raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)717273def is_response_to_head(response):74"""75Checks whether the request of a response has been a HEAD-request.76Handles the quirks of AppEngine.7778:param conn:79:type conn: :class:`httplib.HTTPResponse`80"""81# FIXME: Can we do this somehow without accessing private httplib _method?82method = response._method83if isinstance(method, int): # Platform-specific: Appengine84return method == 385return method.upper() == "HEAD"868788