From 75f13dc1e35a360ea6ed0909af096c76bbfc87c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Wed, 8 Jun 2016 17:57:39 +0200 Subject: [PATCH] Handle HTTP and SSL errors The SSL errors occur on computers that are using old openssl version which fail the handshake. issue5601 review18191002 --- stock.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/stock.py b/stock.py index aa952474ed..14b00e5036 100644 --- a/stock.py +++ b/stock.py @@ -4,6 +4,7 @@ import re import base64 import requests +import ssl from trytond.config import config from trytond.model import fields @@ -153,8 +154,25 @@ class CreateShippingUPS(Wizard): shipment_request = self.get_request(shipment, packages, credential) api_url = config.get('stock_package_shipping_ups', credential.server, default=SERVER_URLS[credential.server]) - req = requests.post(api_url, json=shipment_request) - response = req.json() + nb_tries, response = 0, None + error_message = '' + try: + while nb_tries < 5 and response is None: + try: + req = requests.post(api_url, json=shipment_request) + except ssl.SSLError as e: + error_message = e.message + nb_tries += 1 + continue + req.raise_for_status() + response = req.json() + except requests.HTTPError as e: + error_message = e.message + + if error_message: + self.raise_user_error('ups_webservice_error', { + 'message': error_message, + }) if 'Fault' in response: error = response['Fault']['detail']['Errors']