diff --git a/stripe_checkout/stripe_checkout/management/commands/processevents.py b/stripe_checkout/stripe_checkout/management/commands/processevents.py index 9cdc7e0512fbc54240886ad1466f8e696fa8a4d7..36fcf1675365f6615e24f5a42ce2fab83967c56f 100644 --- a/stripe_checkout/stripe_checkout/management/commands/processevents.py +++ b/stripe_checkout/stripe_checkout/management/commands/processevents.py @@ -16,7 +16,7 @@ VALID_EVENTS = [ PAYMENT_INTENT_CANCELED, ] -RAISE_EXCEPTIONS = True +RAISE_EXCEPTIONS = False UNPROCESSED_PAYMENT_EMAIL_TEMPLATE = """\ A payment was made in Stripe that could not be linked to a Visitor. Please process this @@ -43,11 +43,11 @@ class Command(BaseCommand): else: msg = self.style.SUCCESS(f"{prefix} success!") except Exception: - msg = self.style.ERROR(f"{prefix} error!") + self.stdout.write(self.style.ERROR(f"{prefix} error!")) if RAISE_EXCEPTIONS: raise traceback.print_exc() - finally: + else: event.handled = True event.save() self.stdout.write(msg) @@ -77,7 +77,11 @@ class Command(BaseCommand): if order is None: return self._notify_unprocessed_payment(payment_intent) api = VisitorAPI() - visitor = api.get_visitor(order.visitor_id) + visitor = api.get_visitor_or_none(order.visitor_id) + if visitor is None: + self.stdout.write(self.style.ERROR("Visitor not found!")) + return self._notify_unprocessed_payment(payment_intent) + for item in order.items.all(): if item.kind == ItemKind.REGISTRATION_TYPE: visitor.paid = True @@ -94,7 +98,12 @@ class Command(BaseCommand): if order is None: return False api = VisitorAPI() - visitor = api.get_visitor(order.visitor_id) + visitor = api.get_visitor_or_none(order.visitor_id) + if visitor is None: + self.stdout.write( + self.style.ERROR("Visitor not found! Not processing cancellation") + ) + return visitor.canceled = True api.update_visitor(visitor) order.canceled = True diff --git a/stripe_checkout/stripe_checkout/visit.py b/stripe_checkout/stripe_checkout/visit.py index fb0df5005d8c5b99c1fc48f981b2509b1486525e..2751cc436bc9720f6df4b1f0cd7feb35b604fec7 100644 --- a/stripe_checkout/stripe_checkout/visit.py +++ b/stripe_checkout/stripe_checkout/visit.py @@ -76,6 +76,14 @@ class VisitorAPI: raise Http404() return Visitor.from_api(result) + def get_visitor_or_none( + self, visitor_id: str, allow_deleted=False + ) -> Optional[Visitor]: + try: + return self.get_visitor(visitor_id, allow_deleted) + except Http404: + return None + def update_visitor( self, visitor: Union[str, Visitor], payload: Optional[dict] = None ):