diff options
author | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-11-06 23:26:25 +0100 |
---|---|---|
committer | Stefan Israelsson Tampe <stefan.itampe@gmail.com> | 2018-11-06 23:26:25 +0100 |
commit | 4d4de6eecb3917e19a0af616790630a683b43767 (patch) | |
tree | 84f4e249a986928dfcba616d32a269900804772c /modules/language/python/module/urllib/#error.py# | |
parent | 9f1bcefabfbfb28cd913b363285675d98e9c622c (diff) |
python repo install
Diffstat (limited to 'modules/language/python/module/urllib/#error.py#')
-rw-r--r-- | modules/language/python/module/urllib/#error.py# | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/modules/language/python/module/urllib/#error.py# b/modules/language/python/module/urllib/#error.py# new file mode 100644 index 0000000..7df0238 --- /dev/null +++ b/modules/language/python/module/urllib/#error.py# @@ -0,0 +1,77 @@ +module(urllib,error) + +"""Exception classes raised by urllib. + +The base exception class is URLError, which inherits from OSError. It +doesn't define any behavior of its own, but is the base class for all +exceptions defined in this package. + +HTTPError is an exception class that is also a valid HTTP response +instance. It behaves this way because HTTP protocol errors are valid +responses, with a status code, headers, and a body. In some contexts, +an application may want to handle an exception like a regular +response. +""" + +import urllib.response + +__all__ = ['URLError', 'HTTPError', 'ContentTooShortError'] + +class URLError(OSError): + # URLError is a sub-type of OSError, but it doesn't share any of + # the implementation. need to override __init__ and __str__. + # It sets self.args for compatibility with other EnvironmentError + # subclasses, but args doesn't have the typical format with errno in + # slot 0 and strerror in slot 1. This may be better than nothing. + def __init__(self, reason, filename=None): + self.args = reason, + self.reason = reason + if filename is not None: + self.filename = filename + + def __str__(self): + return '<urlopen error %s>' % self.reason + + +class HTTPError(URLError, urllib.response.addinfourl): + """Raised when HTTP error occurs, but also acts like non-error return""" + __super_init = urllib.response.addinfourl.__init__ + + def __init__(self, url, code, msg, hdrs, fp): + self.code = code + self.msg = msg + self.hdrs = hdrs + self.fp = fp + self.filename = url + # The addinfourl classes depend on fp being a valid file + # object. In some cases, the HTTPError may not have a valid + # file object. If this happens, the simplest workaround is to + # not initialize the base classes. + if fp is not None: + self.__super_init(fp, hdrs, url, code) + + def __str__(self): + return 'HTTP Error %s: %s' % (self.code, self.msg) + + def __repr__(self): + return '<HTTPError %s: %r>' % (self.code, self.msg) + + # since URLError specifies a .reason attribute, HTTPError should also + # provide this attribute. See issue13211 for discussion. + @property + def reason(self): + return self.msg + + @property + def headers(self): + return self.hdrs + + @headers.setter + def headers(self, headers): + self.hdrs = headers + +class ContentTooShortError(URLError): + """Exception raised when downloaded size does not match content-length.""" + def __init__(self, message, content): + URLError.__init__(self, message) + self.content = content |