diff --git a/connector_magento/components/backend_adapter.py b/connector_magento/components/backend_adapter.py index 34491abef..105c493ba 100644 --- a/connector_magento/components/backend_adapter.py +++ b/connector_magento/components/backend_adapter.py @@ -4,12 +4,14 @@ import socket import logging import requests +from requests.compat import json from urllib.parse import quote_plus import xmlrpc.client from odoo.addons.component.core import AbstractComponent from odoo.addons.queue_job.exception import RetryableJobError from odoo.addons.connector.exception import NetworkRetryableError +from odoo.addons.connector_magento.exception import MagentoError from datetime import datetime _logger = logging.getLogger(__name__) @@ -19,7 +21,6 @@ except ImportError: _logger.debug("Cannot import 'magento'") - MAGENTO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' @@ -153,9 +154,19 @@ def call(self, method, arguments, http_method=None, storeview=None): # record(method, arguments, result) return result except (socket.gaierror, socket.error, socket.timeout) as err: + if err.response is not None: + try: + response_message = err.response.json() + raise MagentoError( + ('An error caused the failure of the job %s: %s' % (err, response_message['message'])), + json=response_message + ) + except json.decoder.JSONDecodeError: + pass raise NetworkRetryableError( - 'A network error caused the failure of the job: ' - '%s' % err) + 'A network error caused the failure of the job: %s' + % err + ) except xmlrpc.client.ProtocolError as err: if err.errcode in [502, # Bad gateway 503, # Service unavailable diff --git a/connector_magento/exception.py b/connector_magento/exception.py index 96f1052e4..dd171355d 100644 --- a/connector_magento/exception.py +++ b/connector_magento/exception.py @@ -7,3 +7,14 @@ class OrderImportRuleRetry(RetryableJobError): """ The sale order import will be retried later. """ + + +class MagentoError(Exception): + """Catch Json Error + Attributes: + json -- Catching the json error explanation of the failed job + """ + + def __init__(self, msg, json): + super().__init__(msg) + self.json = json