Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/stripe/error.py: 62%
58 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from __future__ import absolute_import, division, print_function
3import stripe
4from stripe.six import python_2_unicode_compatible
7@python_2_unicode_compatible
8class StripeError(Exception):
9 def __init__(
10 self,
11 message=None,
12 http_body=None,
13 http_status=None,
14 json_body=None,
15 headers=None,
16 code=None,
17 ):
18 super(StripeError, self).__init__(message)
20 if http_body and hasattr(http_body, "decode"):
21 try:
22 http_body = http_body.decode("utf-8")
23 except BaseException:
24 http_body = (
25 "<Could not decode body as utf-8. "
26 "Please report to support@stripe.com>"
27 )
29 self._message = message
30 self.http_body = http_body
31 self.http_status = http_status
32 self.json_body = json_body
33 self.headers = headers or {}
34 self.code = code
35 self.request_id = self.headers.get("request-id", None)
36 self.error = self.construct_error_object()
38 def __str__(self):
39 msg = self._message or "<empty message>"
40 if self.request_id is not None:
41 return u"Request {0}: {1}".format(self.request_id, msg)
42 else:
43 return msg
45 # Returns the underlying `Exception` (base class) message, which is usually
46 # the raw message returned by Stripe's API. This was previously available
47 # in python2 via `error.message`. Unlike `str(error)`, it omits "Request
48 # req_..." from the beginning of the string.
49 @property
50 def user_message(self):
51 return self._message
53 def __repr__(self):
54 return "%s(message=%r, http_status=%r, request_id=%r)" % (
55 self.__class__.__name__,
56 self._message,
57 self.http_status,
58 self.request_id,
59 )
61 def construct_error_object(self):
62 if (
63 self.json_body is None
64 or "error" not in self.json_body
65 or not isinstance(self.json_body["error"], dict)
66 ):
67 return None
69 return stripe.api_resources.error_object.ErrorObject.construct_from(
70 self.json_body["error"], stripe.api_key
71 )
74class APIError(StripeError):
75 pass
78class APIConnectionError(StripeError):
79 def __init__(
80 self,
81 message,
82 http_body=None,
83 http_status=None,
84 json_body=None,
85 headers=None,
86 code=None,
87 should_retry=False,
88 ):
89 super(APIConnectionError, self).__init__(
90 message, http_body, http_status, json_body, headers, code
91 )
92 self.should_retry = should_retry
95class StripeErrorWithParamCode(StripeError):
96 def __repr__(self):
97 return (
98 "%s(message=%r, param=%r, code=%r, http_status=%r, "
99 "request_id=%r)"
100 % (
101 self.__class__.__name__,
102 self._message,
103 self.param,
104 self.code,
105 self.http_status,
106 self.request_id,
107 )
108 )
111class CardError(StripeErrorWithParamCode):
112 def __init__(
113 self,
114 message,
115 param,
116 code,
117 http_body=None,
118 http_status=None,
119 json_body=None,
120 headers=None,
121 ):
122 super(CardError, self).__init__(
123 message, http_body, http_status, json_body, headers, code
124 )
125 self.param = param
128class IdempotencyError(StripeError):
129 pass
132class InvalidRequestError(StripeErrorWithParamCode):
133 def __init__(
134 self,
135 message,
136 param,
137 code=None,
138 http_body=None,
139 http_status=None,
140 json_body=None,
141 headers=None,
142 ):
143 super(InvalidRequestError, self).__init__(
144 message, http_body, http_status, json_body, headers, code
145 )
146 self.param = param
149class AuthenticationError(StripeError):
150 pass
153class PermissionError(StripeError):
154 pass
157class RateLimitError(StripeError):
158 pass
161class SignatureVerificationError(StripeError):
162 def __init__(self, message, sig_header, http_body=None):
163 super(SignatureVerificationError, self).__init__(message, http_body)
164 self.sig_header = sig_header