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