import stripe def handle_stripe_error(f): def handle_problems(*args, **kwargs): response = { 'paid': False, 'response_object': None, 'error': None } common_message = "Currently it's not possible to make payments." try: response_object = f(*args, **kwargs) response = { 'response_object': response_object, 'error': None } return response except stripe.error.CardError as e: # Since it's a decline, stripe.error.CardError will be caught body = e.json_body err = body['error'] response.update({'error': err['message']}) logging.error(str(e)) return response except stripe.error.RateLimitError: response.update( {'error': "Too many requests made to the API too quickly"}) return response except stripe.error.InvalidRequestError as e: logging.error(str(e)) response.update({'error': "Invalid parameters"}) return response except stripe.error.AuthenticationError as e: # Authentication with Stripe's API failed # (maybe you changed API keys recently) logging.error(str(e)) response.update({'error': common_message}) return response except stripe.error.APIConnectionError as e: logging.error(str(e)) response.update({'error': common_message}) return response except stripe.error.StripeError as e: # maybe send email logging.error(str(e)) response.update({'error': common_message}) return response except Exception as e: # maybe send email logging.error(str(e)) response.update({'error': common_message}) return response return handle_problems