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(

Reply via email to