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

1from __future__ import absolute_import, division, print_function 

2 

3import stripe 

4from stripe.six import python_2_unicode_compatible 

5 

6 

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) 

19 

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 ) 

28 

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() 

37 

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 

44 

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 

52 

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 ) 

60 

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 

68 

69 return stripe.api_resources.error_object.ErrorObject.construct_from( 

70 self.json_body["error"], stripe.api_key 

71 ) 

72 

73 

74class APIError(StripeError): 

75 pass 

76 

77 

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 

93 

94 

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 ) 

109 

110 

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 

126 

127 

128class IdempotencyError(StripeError): 

129 pass 

130 

131 

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 

147 

148 

149class AuthenticationError(StripeError): 

150 pass 

151 

152 

153class PermissionError(StripeError): 

154 pass 

155 

156 

157class RateLimitError(StripeError): 

158 pass 

159 

160 

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