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(

Reply via email to