changeset a5a7a647df03 in modules/account_payment_stripe:5.4
details:
https://hg.tryton.org/modules/account_payment_stripe?cmd=changeset;node=a5a7a647df03
description:
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
(grafted from 365eabc14f04bb3afb34c580a83069e5b7f7f841)
diffstat:
payment.py | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
diffs (78 lines):
diff -r 4d0a595daf10 -r a5a7a647df03 payment.py
--- a/payment.py Sat Nov 30 22:46:42 2019 +0100
+++ b/payment.py Thu Dec 05 21:32:58 2019 +0100
@@ -31,6 +31,8 @@
'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 @@
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 @@
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 @@
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 @@
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 @@
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(