AttributeError:“ lxml.etree.QName”对象没有属性“ resolve”

时间:2019-07-10 12:04:42

标签: python python-3.x soap zeep

我正在尝试使用python Zeep库来使用某些SOAP API。但是我无法弄清楚在尝试创建客户端时出现了什么问题。下面是我的代码示例:

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')))

执行该脚本时,似乎正在加载数据(./sqlite不为空),但是出现以下错误(回溯):

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'

不幸的是,我不知道该信息的用途,涉及的内容以及如何解决该问题,因此我可以正确使用客户端!

感谢您可以为我提供有关此主题的帮助。

1 个答案:

答案 0 :(得分:0)

解决这个问题的一种方法是修改zeep/xsd/types/collection.py中涉及的方法:

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

这只是一个解决方案,绝对不是最佳解决方案,但至少它允许我正确使用Zeep客户端!我将在Zeep GitHub上解决一个问题。