From c2f59f08c70deaa4fcca605afa0062b68d1dbfdb Mon Sep 17 00:00:00 2001 From: Laurent Smet Date: Tue, 10 Oct 2017 14:08:20 +0200 Subject: [PATCH] [IMP] base_vat_autocomplete: don't block the user with VIES service - When the VIES service is unreachable/unavailable, don't raise an error. - Set the timeout to 5 seconds instead of default 120 seconds. -task: 35043 --- .../base_vat_autocomplete/models/res_partner.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/base_vat_autocomplete/models/res_partner.py b/addons/base_vat_autocomplete/models/res_partner.py index 3b25f99a8f1..41b40ec9c1d 100644 --- a/addons/base_vat_autocomplete/models/res_partner.py +++ b/addons/base_vat_autocomplete/models/res_partner.py @@ -6,6 +6,8 @@ import re from odoo import api, models +from suds.client import Client + _logger = logging.getLogger(__name__) try: @@ -14,6 +16,7 @@ except ImportError: _logger.warning('Python `stdnum` library not found, unable to call VIES service to detect address based on VAT number.') stdnum_vat = None + class ResPartner(models.Model): _inherit = 'res.partner' @@ -40,7 +43,17 @@ class ResPartner(models.Model): if not partner.vat: return {} if len(partner.vat) > 5 and partner.vat[:2].lower() in stdnum_vat.country_codes: - result = stdnum_vat.check_vies(partner.vat) + # Equivalent to stdnum_vat.check_vies(partner.vat). + # However, we want to add a custom timeout to the suds.client + # because by default, it's 120 seconds and this is to long. + try: + client = Client(stdnum_vat.vies_wsdl, timeout=5) + partner_vat = stdnum_vat.compact(partner.vat) + result = client.service.checkVat(partner_vat[:2], partner_vat[2:]) + except: + # Avoid blocking the client when the service is unreachable/unavailable + return {} + if not result['valid']: return {}