changeset 11fe37501d99 in modules/account_payment_stripe:5.2
details:
https://hg.tryton.org/modules/account_payment_stripe?cmd=changeset;node=11fe37501d99
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 | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diffs (61 lines):
diff -r b9e0c58443e3 -r 11fe37501d99 payment.py
--- a/payment.py Sat Nov 30 22:46:42 2019 +0100
+++ b/payment.py Thu Dec 05 21:32:58 2019 +0100
@@ -29,6 +29,8 @@
'Checkout', 'CheckoutPage']
logger = logging.getLogger(__name__)
+RETRY_CODES = {'lock_timeout', 'token_in_use'}
+
class Journal(metaclass=PoolMeta):
__name__ = 'account.payment.journal'
@@ -382,6 +384,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
@@ -467,6 +472,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])
@@ -847,10 +855,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
@@ -888,8 +900,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(