AttributeError: у объекта 'lxml.etree.QName' нет атрибута 'resol' - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь использовать библиотеку 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 не пустой), но я получаю следующую ошибку (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'

К сожалению, я не знаю, что делать с этой информацией, что она включает и как решить эту проблему, чтобы я мог правильно использовать клиента!

Спасибо за помощь, которую вы могли бы предложить мне по этой теме.

1 Ответ

0 голосов
/ 10 июля 2019

Что ж, один из способов справиться с этим - изменить задействованный метод в 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.

...