def handle_api_error(self, rbody, rcode, resp, rheaders): try: err = resp['error'] except (KeyError, TypeError): raise error.APIError( "Invalid response object from API: %r (HTTP response code " "was %d)" % (rbody, rcode), rbody, rcode, resp) if rcode in [400, 404]: raise error.InvalidRequestError(err.get('message'), err.get('param'), rbody, rcode, resp, rheaders) elif rcode == 401: raise error.AuthenticationError(err.get('message'), rbody, rcode, resp, rheaders) elif rcode == 402: raise error.CardError(err.get('message'), err.get('param'), err.get('code'), rbody, rcode, resp, rheaders) elif rcode == 429: raise error.RateLimitError(err.get('message'), rbody, rcode, resp, rheaders) else: raise error.APIError(err.get('message'), rbody, rcode, resp, rheaders)
def handle_api_error(self, rbody, rcode, resp, rheaders): try: err = resp['error'] except (KeyError, TypeError): raise error.APIError( "Invalid response object from API: %r (HTTP response code " "was %d)" % (rbody, rcode), rbody, rcode, resp) # Rate limits were previously coded as 400's with code 'rate_limit' if rcode == 429 or (rcode == 400 and err.get('code') == 'rate_limit'): raise error.RateLimitError( err.get('message'), rbody, rcode, resp, rheaders) elif rcode in [400, 404]: raise error.InvalidRequestError( err.get('message'), err.get('param'), rbody, rcode, resp, rheaders) elif rcode == 401: raise error.AuthenticationError( err.get('message'), rbody, rcode, resp, rheaders) elif rcode == 402: raise error.CardError(err.get('message'), err.get('param'), err.get('code'), rbody, rcode, resp, rheaders) elif rcode == 403: raise error.PermissionError( err.get('message'), rbody, rcode, resp, rheaders) else: raise error.APIError(err.get('message'), rbody, rcode, resp, rheaders)
def handle_error_response(self, rbody, rcode, resp, rheaders): try: error_data = resp["error"] except (KeyError, TypeError): raise error.APIError( "Invalid response object from API: %r (HTTP response code " "was %d)" % (rbody, rcode), rbody, rcode, resp, ) err = None # OAuth errors are a JSON object where `error` is a string. In # contrast, in API errors, `error` is a hash with sub-keys. We use # this property to distinguish between OAuth and API errors. if isinstance(error_data, six.string_types): err = self.specific_oauth_error(rbody, rcode, resp, rheaders, error_data) if err is None: err = self.specific_api_error(rbody, rcode, resp, rheaders, error_data) raise err
def specific_api_error(self, rbody, rcode, resp, rheaders, error_data): util.log_info( 'Stripe API error received', error_code=error_data.get('code'), error_type=error_data.get('type'), error_message=error_data.get('message'), error_param=error_data.get('param'), ) # Rate limits were previously coded as 400's with code 'rate_limit' if rcode == 429 or (rcode == 400 and error_data.get('code') == 'rate_limit'): return error.RateLimitError( error_data.get('message'), rbody, rcode, resp, rheaders) elif rcode in [400, 404]: return error.InvalidRequestError( error_data.get('message'), error_data.get('param'), error_data.get('code'), rbody, rcode, resp, rheaders) elif rcode == 401: return error.AuthenticationError( error_data.get('message'), rbody, rcode, resp, rheaders) elif rcode == 402: return error.CardError( error_data.get('message'), error_data.get('param'), error_data.get('code'), rbody, rcode, resp, rheaders) elif rcode == 403: return error.PermissionError( error_data.get('message'), rbody, rcode, resp, rheaders) else: return error.APIError( error_data.get('message'), rbody, rcode, resp, rheaders)
def handle_api_error(self, rbody, rcode, resp, rheaders): try: err_type = resp['error'] except (KeyError, TypeError): raise error.APIError( "Invalid response object from API: %r (HTTP response code " "was %d)" % (rbody, rcode), rbody, rcode, resp) description = resp.get('error_description', None) raise error.OAuthError(err_type, description, rbody, rcode, resp, rheaders)
def specific_api_error(self, rbody, rcode, resp, rheaders, error_data): util.log_info( "Stripe API error received", error_code=error_data.get("code"), error_type=error_data.get("type"), error_message=error_data.get("message"), error_param=error_data.get("param"), ) # Rate limits were previously coded as 400's with code 'rate_limit' if rcode == 429 or ( rcode == 400 and error_data.get("code") == "rate_limit" ): return error.RateLimitError( error_data.get("message"), rbody, rcode, resp, rheaders ) elif rcode in [400, 404]: if error_data.get("type") == "idempotency_error": return error.IdempotencyError( error_data.get("message"), rbody, rcode, resp, rheaders ) else: return error.InvalidRequestError( error_data.get("message"), error_data.get("param"), error_data.get("code"), rbody, rcode, resp, rheaders, ) elif rcode == 401: return error.AuthenticationError( error_data.get("message"), rbody, rcode, resp, rheaders ) elif rcode == 402: return error.CardError( error_data.get("message"), error_data.get("param"), error_data.get("code"), rbody, rcode, resp, rheaders, ) elif rcode == 403: return error.PermissionError( error_data.get("message"), rbody, rcode, resp, rheaders ) else: return error.APIError( error_data.get("message"), rbody, rcode, resp, rheaders )
def interpret_response(self, rbody, rcode): try: if hasattr(rbody, 'decode'): rbody = rbody.decode('utf-8') resp = util.json.loads(rbody) except Exception: raise error.APIError( "Invalid response body from API: %s " "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode) if not (200 <= rcode < 300): self.handle_api_error(rbody, rcode, resp) return resp
def interpret_response(self, rbody, rcode, rheaders): try: if hasattr(rbody, 'decode'): rbody = rbody.decode('utf-8') resp = StripeResponse(rbody, rcode, rheaders) except Exception: raise error.APIError( "Invalid response body from API: %s " "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode, rheaders) if not (200 <= rcode < 300): self.handle_error_response(rbody, rcode, resp.data, rheaders) return resp
def interpret_response(self, rbody, rcode, rheaders): try: if hasattr(rbody, "decode"): rbody = rbody.decode("utf-8") resp = StripeResponse(rbody, rcode, rheaders) except Exception: raise error.APIError( "Invalid response body from API: %s " "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode, rheaders, ) if self._should_handle_code_as_error(rcode): self.handle_error_response(rbody, rcode, resp.data, rheaders) return resp
def interpret_response(self, rbody, rcode, rheaders): try: if hasattr(rbody, 'decode'): rbody = rbody.decode('utf-8') resp = util.json.loads(rbody) except Exception: raise error.APIError( "Invalid response body from API: %s " "(HTTP response code was %d)" % (rbody, rcode), rbody, rcode, rheaders) if not (200 <= rcode < 300): util.log_info( 'Stripe API error received', error=resp.get('error'), error_description=resp.get('error_description', ''), ) self.handle_api_error(rbody, rcode, resp, rheaders) return resp