codekingpro/portable-devtools
114k
1from __future__ import absolute_import2 3from .packages.six.moves.http_client import IncompleteRead as httplib_IncompleteRead4 5# Base Exceptions6 7 8class HTTPError(Exception):9 """Base exception used by this module."""10 11 pass12 13 14class HTTPWarning(Warning):15 """Base warning used by this module."""16 17 pass18 19 20class PoolError(HTTPError):21 """Base exception for errors caused within a pool."""22 23 def __init__(self, pool, message):24 self.pool = pool25 HTTPError.__init__(self, "%s: %s" % (pool, message))26 27 def __reduce__(self):28 # For pickling purposes.29 return self.__class__, (None, None)30 31 32class RequestError(PoolError):33 """Base exception for PoolErrors that have associated URLs."""34 35 def __init__(self, pool, url, message):36 self.url = url37 PoolError.__init__(self, pool, message)38 39 def __reduce__(self):40 # For pickling purposes.41 return self.__class__, (None, self.url, None)42 43 44class SSLError(HTTPError):45 """Raised when SSL certificate fails in an HTTPS connection."""46 47 pass48 49 50class ProxyError(HTTPError):51 """Raised when the connection to a proxy fails."""52 53 def __init__(self, message, error, *args):54 super(ProxyError, self).__init__(message, error, *args)55 self.original_error = error56 57 58class DecodeError(HTTPError):59 """Raised when automatic decoding based on Content-Type fails."""60 61 pass62 63 64class ProtocolError(HTTPError):65 """Raised when something unexpected happens mid-request/response."""66 67 pass68 69 70#: Renamed to ProtocolError but aliased for backwards compatibility.71ConnectionError = ProtocolError72 73 74# Leaf Exceptions75 76 77class MaxRetryError(RequestError):78 """Raised when the maximum number of retries is exceeded.79 80 :param pool: The connection pool81 :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool`82 :param string url: The requested Url83 :param exceptions.Exception reason: The underlying error84 85 """86 87 def __init__(self, pool, url, reason=None):88 self.reason = reason89 90 message = "Max retries exceeded with url: %s (Caused by %r)" % (url, reason)91 92 RequestError.__init__(self, pool, url, message)93 94 95class HostChangedError(RequestError):96 """Raised when an existing pool gets a request for a foreign host."""97 98 def __init__(self, pool, url, retries=3):99 message = "Tried to open a foreign host with url: %s" % url100 RequestError.__init__(self, pool, url, message)101 self.retries = retries102 103 104class TimeoutStateError(HTTPError):105 """Raised when passing an invalid state to a timeout"""106 107 pass108 109 110class TimeoutError(HTTPError):111 """Raised when a socket timeout error occurs.112 113 Catching this error will catch both :exc:`ReadTimeoutErrors114 <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`.115 """116 117 pass118 119 120class ReadTimeoutError(TimeoutError, RequestError):121 """Raised when a socket timeout occurs while receiving data from a server"""122 123 pass124 125 126# This timeout error does not have a URL attached and needs to inherit from the127# base HTTPError128class ConnectTimeoutError(TimeoutError):129 """Raised when a socket timeout occurs while connecting to a server"""130 131 pass132 133 134class NewConnectionError(ConnectTimeoutError, PoolError):135 """Raised when we fail to establish a new connection. Usually ECONNREFUSED."""136 137 pass138 139 140class EmptyPoolError(PoolError):141 """Raised when a pool runs out of connections and no more are allowed."""142 143 pass144 145 146class ClosedPoolError(PoolError):147 """Raised when a request enters a pool after the pool has been closed."""148 149 pass150 151 152class LocationValueError(ValueError, HTTPError):153 """Raised when there is something wrong with a given URL input."""154 155 pass156 157 158class LocationParseError(LocationValueError):159 """Raised when get_host or similar fails to parse the URL input."""160 161 def __init__(self, location):162 message = "Failed to parse: %s" % location163 HTTPError.__init__(self, message)164 165 self.location = location166 167 168class URLSchemeUnknown(LocationValueError):169 """Raised when a URL input has an unsupported scheme."""170 171 def __init__(self, scheme):172 message = "Not supported URL scheme %s" % scheme173 super(URLSchemeUnknown, self).__init__(message)174 175 self.scheme = scheme176 177 178class ResponseError(HTTPError):179 """Used as a container for an error reason supplied in a MaxRetryError."""180 181 GENERIC_ERROR = "too many error responses"182 SPECIFIC_ERROR = "too many {status_code} error responses"183 184 185class SecurityWarning(HTTPWarning):186 """Warned when performing security reducing actions"""187 188 pass189 190 191class SubjectAltNameWarning(SecurityWarning):192 """Warned when connecting to a host with a certificate missing a SAN."""193 194 pass195 196 197class InsecureRequestWarning(SecurityWarning):198 """Warned when making an unverified HTTPS request."""199 200 pass201 202 203class SystemTimeWarning(SecurityWarning):204 """Warned when system time is suspected to be wrong"""205 206 pass207 208 209class InsecurePlatformWarning(SecurityWarning):210 """Warned when certain TLS/SSL configuration is not available on a platform."""211 212 pass213 214 215class SNIMissingWarning(HTTPWarning):216 """Warned when making a HTTPS request without SNI available."""217 218 pass219 220 221class DependencyWarning(HTTPWarning):222 """223 Warned when an attempt is made to import a module with missing optional224 dependencies.225 """226 227 pass228 229 230class ResponseNotChunked(ProtocolError, ValueError):231 """Response needs to be chunked in order to read it as chunks."""232 233 pass234 235 236class BodyNotHttplibCompatible(HTTPError):237 """238 Body should be :class:`http.client.HTTPResponse` like239 (have an fp attribute which returns raw chunks) for read_chunked().240 """241 242 pass243 244 245class IncompleteRead(HTTPError, httplib_IncompleteRead):246 """247 Response length doesn't match expected Content-Length248 249 Subclass of :class:`http.client.IncompleteRead` to allow int value250 for ``partial`` to avoid creating large objects on streamed reads.251 """252 253 def __init__(self, partial, expected):254 super(IncompleteRead, self).__init__(partial, expected)255 256 def __repr__(self):257 return "IncompleteRead(%i bytes read, %i more expected)" % (258 self.partial,259 self.expected,260 )261 262 263class InvalidChunkLength(HTTPError, httplib_IncompleteRead):264 """Invalid chunk length in a chunked response."""265 266 def __init__(self, response, length):267 super(InvalidChunkLength, self).__init__(268 response.tell(), response.length_remaining269 )270 self.response = response271 self.length = length272 273 def __repr__(self):274 return "InvalidChunkLength(got length %r, %i bytes read)" % (275 self.length,276 self.partial,277 )278 279 280class InvalidHeader(HTTPError):281 """The header provided was somehow invalid."""282 283 pass284 285 286class ProxySchemeUnknown(AssertionError, URLSchemeUnknown):287 """ProxyManager does not support the supplied scheme"""288 289 # TODO(t-8ch): Stop inheriting from AssertionError in v2.0.290 291 def __init__(self, scheme):292 # 'localhost' is here because our URL parser parses293 # localhost:8080 -> scheme=localhost, remove if we fix this.294 if scheme == "localhost":295 scheme = None296 if scheme is None:297 message = "Proxy URL had no scheme, should start with http:// or https://"298 else:299 message = (300 "Proxy URL had unsupported scheme %s, should use http:// or https://"301 % scheme302 )303 super(ProxySchemeUnknown, self).__init__(message)304 305 306class ProxySchemeUnsupported(ValueError):307 """Fetching HTTPS resources through HTTPS proxies is unsupported"""308 309 pass310 311 312class HeaderParsingError(HTTPError):313 """Raised by assert_header_parsing, but we convert it to a log.warning statement."""314 315 def __init__(self, defects, unparsed_data):316 message = "%s, unparsed data: %r" % (defects or "Unknown", unparsed_data)317 super(HeaderParsingError, self).__init__(message)318 319 320class UnrewindableBodyError(HTTPError):321 """urllib3 encountered an error when trying to rewind a body"""322 323 pass324 