python-zeep icon indicating copy to clipboard operation
python-zeep copied to clipboard

AttributeError: 'lxml.etree.QName' object has no attribute 'resolve'

Open KrazyMax opened this issue 5 years ago • 6 comments

  • Zeep version is 3.4.0
  • WSDL file is private unfortunately.

Example of a simple script which got me the issue:

from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client, Settings
from zeep.cache import SqliteCache
from zeep.transports import Transport

from conf.shared_vars import B2B_PROXY, WSDL_PROXY

session = Session()
session.auth = HTTPBasicAuth(B2B_PROXY['key'], B2B_PROXY['secret'])
wsdl = WSDL_PROXY + "SomeServices.wsdl"

client = Client(
    wsdl=wsdl, 
    transport=Transport(
        session=session, 
        cache=SqliteCache(path='./sqlite.db')))

Traceback:

File "test_zeep.py", line 17, in <module>
    cache=SqliteCache(path='./sqlite.db')))
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/client.py", line 68, in __init__
    self.wsdl = Document(wsdl, self.transport, settings=self.settings)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 82, in __init__
    root_definitions = Definition(self, document, self.location)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 184, in __init__
    self.parse_types(doc)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 316, in parse_types
    self.types.add_documents(schema_nodes, self.location)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 117, in add_documents
    document.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 475, in resolve
    _resolve_dict(self._elements)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 456, in _resolve_dict
    new = obj.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/unresolved.py", line 23, in resolve
    return retval.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 355, in resolve
    self._resolved = self.extend(self._extension)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 401, in extend
    self._element = self._element.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/indicators.py", line 213, in resolve
    self[i] = elm.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/unresolved.py", line 23, in resolve
    return retval.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 361, in resolve
    self._element = self._element.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/indicators.py", line 213, in resolve
    self[i] = elm.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/collection.py", line 21, in resolve
    self.item_type = self.item_type.resolve()
AttributeError: 'lxml.etree.QName' object has no attribute 'resolve'

Fix I'm using for now, in zeep/xsd/types/collection.py:

class ListType(AnySimpleType):
    [...]
    def resolve(self):
        try:
            self.item_type = self.item_type.resolve()
        except Exception:
            print("No resolve method for {}".format(self.item_type))
        self.base_class = self.item_type.__class__
        return self
    [...]

Thanks for the good work! I am discovering this package, so many possibilities :-)

KrazyMax avatar Jul 10 '19 13:07 KrazyMax

Is this still the best solution for an error regarding a no resolve method?

RDWimmers avatar Dec 02 '20 11:12 RDWimmers

I don't have anything better for now!

KrazyMax avatar Dec 02 '20 13:12 KrazyMax

Hi, It would be nice to have this merged...

sposs avatar Apr 30 '21 07:04 sposs

This still appears to be an issue

jamie-chapman avatar Mar 24 '23 10:03 jamie-chapman

Any updates ?

MaximeDetne avatar Nov 02 '23 12:11 MaximeDetne