Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/future/backports/urllib/error.py: 48%
33 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:53 +0000
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:53 +0000
1"""Exception classes raised by urllib.
3The base exception class is URLError, which inherits from IOError. It
4doesn't define any behavior of its own, but is the base class for all
5exceptions defined in this package.
7HTTPError is an exception class that is also a valid HTTP response
8instance. It behaves this way because HTTP protocol errors are valid
9responses, with a status code, headers, and a body. In some contexts,
10an application may want to handle an exception like a regular
11response.
12"""
13from __future__ import absolute_import, division, unicode_literals
14from future import standard_library
16from future.backports.urllib import response as urllib_response
19__all__ = ['URLError', 'HTTPError', 'ContentTooShortError']
22# do these error classes make sense?
23# make sure all of the IOError stuff is overridden. we just want to be
24# subtypes.
26class URLError(IOError):
27 # URLError is a sub-type of IOError, but it doesn't share any of
28 # the implementation. need to override __init__ and __str__.
29 # It sets self.args for compatibility with other EnvironmentError
30 # subclasses, but args doesn't have the typical format with errno in
31 # slot 0 and strerror in slot 1. This may be better than nothing.
32 def __init__(self, reason, filename=None):
33 self.args = reason,
34 self.reason = reason
35 if filename is not None:
36 self.filename = filename
38 def __str__(self):
39 return '<urlopen error %s>' % self.reason
41class HTTPError(URLError, urllib_response.addinfourl):
42 """Raised when HTTP error occurs, but also acts like non-error return"""
43 __super_init = urllib_response.addinfourl.__init__
45 def __init__(self, url, code, msg, hdrs, fp):
46 self.code = code
47 self.msg = msg
48 self.hdrs = hdrs
49 self.fp = fp
50 self.filename = url
51 # The addinfourl classes depend on fp being a valid file
52 # object. In some cases, the HTTPError may not have a valid
53 # file object. If this happens, the simplest workaround is to
54 # not initialize the base classes.
55 if fp is not None:
56 self.__super_init(fp, hdrs, url, code)
58 def __str__(self):
59 return 'HTTP Error %s: %s' % (self.code, self.msg)
61 # since URLError specifies a .reason attribute, HTTPError should also
62 # provide this attribute. See issue13211 for discussion.
63 @property
64 def reason(self):
65 return self.msg
67 def info(self):
68 return self.hdrs
71# exception raised when downloaded size does not match content-length
72class ContentTooShortError(URLError):
73 def __init__(self, message, content):
74 URLError.__init__(self, message)
75 self.content = content