From f61b91dab23a0edc24aee25d3c4c4d3d719c790e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Sat, 18 Apr 2020 11:51:13 +0200 Subject: [PATCH] Catch any exception from VIES VAT check --- .../uncloud/uncloud_pay/views.py | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/uncloud_django_based/uncloud/uncloud_pay/views.py b/uncloud_django_based/uncloud/uncloud_pay/views.py index 5bd1ae6..aaf90e2 100644 --- a/uncloud_django_based/uncloud/uncloud_pay/views.py +++ b/uncloud_django_based/uncloud/uncloud_pay/views.py @@ -11,6 +11,7 @@ from vat_validator import validate_vat, vies from vat_validator.countries import EU_COUNTRY_CODES import json +import logging from .models import * from .serializers import * @@ -18,6 +19,8 @@ from datetime import datetime from vat_validator import sanitize_vat import uncloud_pay.stripe as uncloud_stripe +logger = logging.getLogger(__name__) + ### # Payments and Payment Methods. @@ -221,13 +224,19 @@ class BillingAddressViewSet(mixins.CreateModelMixin, {'error': 'Malformed VAT number.'}, status=status.HTTP_400_BAD_REQUEST) elif country in EU_COUNTRY_CODES: - # FIXME: make a synchroneous call to a third patry API here is - # not a good idea... - vies_state = vies.check_vat(country, vat_number) - if not vies_state.valid: + # XXX: make a synchroneous call to a third patry API here might not be a good idea.. + try: + vies_state = vies.check_vat(country, vat_number) + if not vies_state.valid: + return Response( + {'error': 'European VAT number does not exist in VIES.'}, + status=status.HTTP_400_BAD_REQUEST) + except Exception as e: + logger.warning(e) return Response( - {'error': 'European VAT number does not exist in VIES.'}, - status=status.HTTP_400_BAD_REQUEST) + {'error': 'Could not validate EU VAT number against VIES. Try again later..'}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR) + serializer.save(owner=request.user) return Response(serializer.data)