Retry later on some StripeError depending of the code

The code lock_timeout and token_in_use must be retried as it is an unexpected
behavior from Stripe service.
Also some calls did not catch APIConnectionError for retry.

issue8871
review270611002
This commit is contained in:
Cédric Krier committed 2019-12-05 21:32:58 +01:00
1 parent 522b6e6650
commit 44e0bd5e47
1 file changed
+23 -6
+23 -6
View File
@@ -31,6 +31,8 @@ __all__ = ['Journal', 'Group', 'Payment', 'Account', 'Customer',
'Checkout', 'CheckoutPage']
logger = logging.getLogger(__name__)
RETRY_CODES = {'lock_timeout', 'token_in_use'}
class Journal(metaclass=PoolMeta):
__name__ = 'account.payment.journal'
@@ -587,6 +589,9 @@ class Payment(CheckoutMixin, metaclass=PoolMeta):
logger.warning(str(e))
continue
except stripe.error.StripeError as e:
if e.code in RETRY_CODES:
logger.warning(str(e))
continue
payment.stripe_error_message = str(e)
if isinstance(e, stripe.error.CardError):
payment.stripe_error_code = e.code
@@ -688,6 +693,9 @@ class Payment(CheckoutMixin, metaclass=PoolMeta):
logger.warning(str(e))
continue
except stripe.error.StripeError as e:
if e.code in RETRY_CODES:
logger.warning(str(e))
continue
payment.stripe_error_message = str(e)
payment.save()
cls.fail([payment])
@@ -1245,10 +1253,14 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
description=customer.rec_name,
email=customer.party.email,
source=customer.stripe_token)
except stripe.error.RateLimitError:
logger.warning("Rate limit error")
except (stripe.error.RateLimitError,
stripe.error.APIConnectionError) as e:
logger.warning(str(e))
continue
except stripe.error.StripeError as e:
if e.code in RETRY_CODES:
logger.warning(str(e))
continue
customer.stripe_error_message = str(e)
if isinstance(e, stripe.error.CardError):
customer.stripe_error_code = e.code
@@ -1286,8 +1298,9 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
api_key=customer.stripe_account.secret_key,
id=customer.stripe_customer_id)
cu.delete()
except stripe.error.RateLimitError:
logger.warning("Rate limit error")
except (stripe.error.RateLimitError,
stripe.error.APIConnectionError) as e:
logger.warning(str(e))
continue
except Exception:
logger.error(
@@ -1426,10 +1439,14 @@ class Customer(CheckoutMixin, DeactivableMixin, ModelSQL, ModelView):
email=customer.party.email,
payment_method=setup_intent.payment_method)
customer.stripe_customer_id = cu.id
except stripe.error.RateLimitError:
logger.warning("Rate limit error")
except (stripe.error.RateLimitError,
stripe.error.APIConnectionError) as e:
logger.warning(str(e))
continue
except stripe.error.StripeError as e:
if e.code in RETRY_CODES:
logger.warning(str(e))
continue
customer.stripe_error_message = str(e)
except Exception:
logger.error(