diff options
| author | Yuval Adam <_@yuv.al> | 2017-11-17 14:54:19 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2017-11-17 14:54:19 +0200 |
| commit | 1c703284cfa73350b794d50795133f2c2ea26f0b (patch) | |
| tree | 73b2fb83395ac2ed27a47ce5d1a6f080b536b305 /cron/urllib3/util/response.py | |
| parent | f6b1c6ad35accad8d93370024d7f0b3088f32bdc (diff) | |
Add lambda cron task
Diffstat (limited to 'cron/urllib3/util/response.py')
| -rw-r--r-- | cron/urllib3/util/response.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/cron/urllib3/util/response.py b/cron/urllib3/util/response.py new file mode 100644 index 0000000..67cf730 --- /dev/null +++ b/cron/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' |
