From c0905475e3cc21ffbfbfef5a95c3290480c12bea Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Mon, 8 Apr 2024 09:00:33 +0200 Subject: [PATCH] [FIX] tools: zeep, oversight in c111d5cd17a00644a99828848c81ecb6c5b06d22 The module `l10n_nl_reports_sbr` requires - `zeep.wsdl.utils.get_or_create_header` - `zeep.ns.*` - `zeep.wsse.*` In addition, it requires the `session` to be already set during the creation of the client. The module `l10n_pe_edi` requires `requests.Response` as possible output for service ```py result = client.service.sendBill if result.status_code != 500: ... ``` Can be tested with `--test-tags external_l10n:TestEdiSunat` opw-3887309 opw-3884785 opw-3885630 opw-3870707 opw-3888951 opw-3885636 opw-3885392 opw-3885383 opw-3889366 opw-3888841 --- odoo/tools/zeep/__init__.py | 3 ++- odoo/tools/zeep/client.py | 22 +++++++++++----------- odoo/tools/zeep/ns.py | 1 + odoo/tools/zeep/wsdl/__init__.py | 1 + odoo/tools/zeep/wsdl/utils.py | 2 +- odoo/tools/zeep/wsse/username/__init__.py | 2 +- 6 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 odoo/tools/zeep/ns.py create mode 100644 odoo/tools/zeep/wsdl/__init__.py diff --git a/odoo/tools/zeep/__init__.py b/odoo/tools/zeep/__init__.py index cb3a74b1249..f0a747a0734 100644 --- a/odoo/tools/zeep/__init__.py +++ b/odoo/tools/zeep/__init__.py @@ -1,7 +1,8 @@ from zeep.transports import Transport from zeep.plugins import Plugin from zeep.settings import Settings -from zeep.ns import * from . import exceptions +from . import ns +from . import wsdl from .client import Client diff --git a/odoo/tools/zeep/client.py b/odoo/tools/zeep/client.py index b335aa23b9d..900029e0e62 100644 --- a/odoo/tools/zeep/client.py +++ b/odoo/tools/zeep/client.py @@ -2,11 +2,14 @@ import zeep from decimal import Decimal from datetime import date, datetime, timedelta +from requests import Response from types import SimpleNamespace, FunctionType TIMEOUT = 30 -SERIALIZABLE_TYPES = (type(None), bool, int, float, str, bytes, tuple, list, dict, Decimal, date, datetime, timedelta) +SERIALIZABLE_TYPES = ( + type(None), bool, int, float, str, bytes, tuple, list, dict, Decimal, date, datetime, timedelta, Response +) class Client: @@ -17,19 +20,16 @@ class Client: * serializing the returned values of its methods. """ def __init__(self, *args, **kwargs): - load_timeout = kwargs.pop('timeout', None) - operation_timeout = kwargs.pop('operation_timeout', None) - session = kwargs.pop('session', None) + transport = kwargs.setdefault('transport', zeep.Transport()) + # The timeout for loading wsdl and xsd documents. + transport.load_timeout = kwargs.pop('timeout', None) or transport.load_timeout or TIMEOUT + # The timeout for operations (POST/GET) + transport.operation_timeout = kwargs.pop('operation_timeout', None) or transport.operation_timeout or TIMEOUT + # The `requests.session` used for HTTP requests + transport.session = kwargs.pop('session', None) or transport.session client = zeep.Client(*args, **kwargs) - # The timeout for loading wsdl and xsd documents. - client.transport.load_timeout = load_timeout or client.transport.load_timeout or TIMEOUT - # The timeout for operations (POST/GET) - client.transport.operation_timeout = operation_timeout or client.transport.operation_timeout or TIMEOUT - if session: - client.transport.session = session - self.__obj = client self.__service = None diff --git a/odoo/tools/zeep/ns.py b/odoo/tools/zeep/ns.py new file mode 100644 index 00000000000..f1dc68cce36 --- /dev/null +++ b/odoo/tools/zeep/ns.py @@ -0,0 +1 @@ +from zeep.ns import * diff --git a/odoo/tools/zeep/wsdl/__init__.py b/odoo/tools/zeep/wsdl/__init__.py new file mode 100644 index 00000000000..eb018c3ff09 --- /dev/null +++ b/odoo/tools/zeep/wsdl/__init__.py @@ -0,0 +1 @@ +from . import utils diff --git a/odoo/tools/zeep/wsdl/utils.py b/odoo/tools/zeep/wsdl/utils.py index e9b8cc3c653..18ab45c4f00 100644 --- a/odoo/tools/zeep/wsdl/utils.py +++ b/odoo/tools/zeep/wsdl/utils.py @@ -1 +1 @@ -from zeep.wsdl.utils import etree_to_string +from zeep.wsdl.utils import etree_to_string, get_or_create_header diff --git a/odoo/tools/zeep/wsse/username/__init__.py b/odoo/tools/zeep/wsse/username/__init__.py index 8b5481e46a5..7cd675c5064 100644 --- a/odoo/tools/zeep/wsse/username/__init__.py +++ b/odoo/tools/zeep/wsse/username/__init__.py @@ -1 +1 @@ -from zeep.wsse.username import UsernameToken +from zeep.wsse.username import *