forked from DataDog/datadogpy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
exceptions.py
105 lines (81 loc) · 3.1 KB
/
exceptions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Unless explicitly stated otherwise all files in this repository are licensed under the BSD-3-Clause License.
# This product includes software developed at Datadog (https://www.datadoghq.com/).
# Copyright 2015-Present Datadog, Inc
"""
API & HTTP Clients exceptions.
"""
class DatadogException(Exception):
"""
Base class for Datadog API exceptions. Use this for patterns like the following:
try:
# do something with the Datadog API
except datadog.api.exceptions.DatadogException:
# handle any Datadog-specific exceptions
"""
class ProxyError(DatadogException):
"""
HTTP connection to the configured proxy server failed.
"""
def __init__(self, method, url, exception):
message = (
u"Could not request {method} {url}: Unable to connect to proxy. "
u"Please check the proxy configuration and try again.".format(method=method, url=url)
)
super(ProxyError, self).__init__(message)
class ClientError(DatadogException):
"""
HTTP connection to Datadog endpoint is not possible.
"""
def __init__(self, method, url, exception):
message = (
u"Could not request {method} {url}: {exception}. "
u"Please check the network connection or try again later. "
u"If the problem persists, please contact [email protected]".format(
method=method, url=url, exception=exception
)
)
super(ClientError, self).__init__(message)
class HttpTimeout(DatadogException):
"""
HTTP connection timeout.
"""
def __init__(self, method, url, timeout):
message = (
u"{method} {url} timed out after {timeout}. "
u"Please try again later. "
u"If the problem persists, please contact [email protected]".format(
method=method, url=url, timeout=timeout
)
)
super(HttpTimeout, self).__init__(message)
class HttpBackoff(DatadogException):
"""
Backing off after too many timeouts.
"""
def __init__(self, backoff_period):
message = u"Too many timeouts. Won't try again for {backoff_period} seconds. ".format(
backoff_period=backoff_period
)
super(HttpBackoff, self).__init__(message)
class HTTPError(DatadogException):
"""
Datadog returned a HTTP error.
"""
def __init__(self, status_code=None, reason=None):
reason = u" - {reason}".format(reason=reason) if reason else u""
message = (
u"Datadog returned a bad HTTP response code: {status_code}{reason}. "
u"Please try again later. "
u"If the problem persists, please contact [email protected]".format(
status_code=status_code,
reason=reason,
)
)
super(HTTPError, self).__init__(message)
class ApiError(DatadogException):
"""
Datadog returned an API error (known HTTPError).
Matches the following status codes: 400, 401, 403, 404, 409, 429.
"""
class ApiNotInitialized(DatadogException):
"No API key is set"