1# -*- coding: utf-8 -*-
2
3"""
4requests.exceptions
5~~~~~~~~~~~~~~~~~~~
6
7This module contains the set of Requests' exceptions.
8
9"""
10from .packages.urllib3.exceptions import HTTPError as BaseHTTPError
11
12
13class RequestException(IOError):
14 """There was an ambiguous exception that occurred while handling your
15 request."""
16
17 def __init__(self, *args, **kwargs):
18 """
19 Initialize RequestException with `request` and `response` objects.
20 """
21 response = kwargs.pop('response', None)
22 self.response = response
23 self.request = kwargs.pop('request', None)
24 if (response is not None and not self.request and
25 hasattr(response, 'request')):
26 self.request = self.response.request
27 super(RequestException, self).__init__(*args, **kwargs)
28
29
30class HTTPError(RequestException):
31 """An HTTP error occurred."""
32
33
34class ConnectionError(RequestException):
35 """A Connection error occurred."""
36
37
38class ProxyError(ConnectionError):
39 """A proxy error occurred."""
40
41
42class SSLError(ConnectionError):
43 """An SSL error occurred."""
44
45
46class Timeout(RequestException):
47 """The request timed out.
48
49 Catching this error will catch both
50 :exc:`~requests.exceptions.ConnectTimeout` and
51 :exc:`~requests.exceptions.ReadTimeout` errors.
52 """
53
54
55class ConnectTimeout(ConnectionError, Timeout):
56 """The request timed out while trying to connect to the remote server.
57
58 Requests that produced this error are safe to retry.
59 """
60
61
62class ReadTimeout(Timeout):
63 """The server did not send any data in the allotted amount of time."""
64
65
66class URLRequired(RequestException):
67 """A valid URL is required to make a request."""
68
69
70class TooManyRedirects(RequestException):
71 """Too many redirects."""
72
73
74class MissingSchema(RequestException, ValueError):
75 """The URL schema (e.g. http or https) is missing."""
76
77
78class InvalidSchema(RequestException, ValueError):
79 """See defaults.py for valid schemas."""
80
81
82class InvalidURL(RequestException, ValueError):
83 """ The URL provided was somehow invalid. """
84
85
86class ChunkedEncodingError(RequestException):
87 """The server declared chunked encoding but sent an invalid chunk."""
88
89
90class ContentDecodingError(RequestException, BaseHTTPError):
91 """Failed to decode response content"""
92
93
94class StreamConsumedError(RequestException, TypeError):
95 """The content for this response was already consumed"""
96
97
98class RetryError(RequestException):
99 """Custom retries logic failed"""