From 3c3b14aa30406cfe8318f0bb6192816737ba2742 Mon Sep 17 00:00:00 2001 From: Soukainaalhaddan <97032315+Soukainaalhaddan@users.noreply.github.com> Date: Thu, 3 Mar 2022 11:05:54 +0100 Subject: [PATCH 1/2] [FIX] Capture magento queue job erros [FIX] Capture magento queue job erros fix code and handle json error remove repeated code lines --- connector_magento/components/backend_adapter.py | 15 +++++++++++++-- connector_magento/exception.py | 11 +++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/connector_magento/components/backend_adapter.py b/connector_magento/components/backend_adapter.py index 34491abef..b9c1d0b03 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 json.decoder import JSONDecodeError 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__) @@ -153,9 +155,18 @@ 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: + json = err.response.json() + raise MagentoError( + ('An error caused the failure of the job %s: %s' % (err, json['message'])), json=json + ) + except 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 From 232242b5ea1b171f953ccc67f9cce9ef503f0577 Mon Sep 17 00:00:00 2001 From: Soukainaalhaddan <97032315+Soukainaalhaddan@users.noreply.github.com> Date: Wed, 18 May 2022 18:12:55 +0200 Subject: [PATCH 2/2] OD-1976 json error not caught when checking if a magento error contains a valid json (#23) * [FIX] OD-1976: Treat Simplejson errors * [FIX] OD-1976: improve code --- connector_magento/components/backend_adapter.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/connector_magento/components/backend_adapter.py b/connector_magento/components/backend_adapter.py index b9c1d0b03..105c493ba 100644 --- a/connector_magento/components/backend_adapter.py +++ b/connector_magento/components/backend_adapter.py @@ -4,7 +4,7 @@ import socket import logging import requests -from json.decoder import JSONDecodeError +from requests.compat import json from urllib.parse import quote_plus import xmlrpc.client @@ -21,7 +21,6 @@ except ImportError: _logger.debug("Cannot import 'magento'") - MAGENTO_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' @@ -157,11 +156,12 @@ def call(self, method, arguments, http_method=None, storeview=None): except (socket.gaierror, socket.error, socket.timeout) as err: if err.response is not None: try: - json = err.response.json() + response_message = err.response.json() raise MagentoError( - ('An error caused the failure of the job %s: %s' % (err, json['message'])), json=json + ('An error caused the failure of the job %s: %s' % (err, response_message['message'])), + json=response_message ) - except JSONDecodeError: + except json.decoder.JSONDecodeError: pass raise NetworkRetryableError( 'A network error caused the failure of the job: %s'