# ruff: noqa: PLC0415 _soap_clients = {} def new_get_soap_client(wsdlurl, timeout=30): # stdnum library does not set the timeout for the zeep Transport class correctly # (timeout is to fetch the wsdl and operation_timeout is to perform the call), # requiring us to monkey patch the get_soap_client function. # Can be removed when https://github.com/arthurdejong/python-stdnum/issues/444 is # resolved and the version of the dependency is updated. # The code is a copy of the original apart for the line related to the Transport class. # This was done to keep the code as similar to the original and to reduce the possibility # of introducing import errors, even though some imports are not in the requirements. # See https://github.com/odoo/odoo/pull/173359 for a more thorough explanation. if (wsdlurl, timeout) not in _soap_clients: try: from zeep.transports import Transport transport = Transport(operation_timeout=timeout, timeout=timeout) # operational_timeout added here from zeep import CachingClient client = CachingClient(wsdlurl, transport=transport).service except ImportError: # fall back to non-caching zeep client try: from zeep import Client client = Client(wsdlurl, transport=transport).service except ImportError: # other implementations require passing the proxy config try: from urllib import getproxies except ImportError: from urllib.request import getproxies # fall back to suds try: from suds.client import Client client = Client( wsdlurl, proxy=getproxies(), timeout=timeout).service except ImportError: # use pysimplesoap as last resort try: from pysimplesoap.client import SoapClient client = SoapClient( wsdl=wsdlurl, proxy=getproxies(), timeout=timeout) except ImportError: raise ImportError( 'No SOAP library (such as zeep) found') _soap_clients[(wsdlurl, timeout)] = client return _soap_clients[(wsdlurl, timeout)] def patch_stdnum(): try: from stdnum import util except ImportError: return # nothing to patch util.get_soap_client = new_get_soap_client