Форум сайта python.su
Добрый вечер.
Очень нужна помощь.
Есть проблема(или недопонимание) с библиотекой suds, а точнее с её форком suds-jurko.
На сколько я понимаю, форк сделан для версии python 3+
Описание самой проблемы:
Есть SOAP сервис с wsdl файлом https://localhost/service/?wsdl
Через сервис необходимо добавлять данные в бд
Но не получается даже подключиться
from suds.client import Client url = "https://localhost/service/?wsdl" client = Client(url, cache=None)
Traceback (most recent call last): File "test.py", line 6, in <module> client = Client(url, cache=None) File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/client.py", line 115, in __init__ self.wsdl = reader.open(url) File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/reader.py", line 150, in open d = self.fn(url, self.options) File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/wsdl.py", line 159, in __init__ self.build_schema() File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/wsdl.py", line 220, in build_schema self.schema = container.load(self.options) File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/xsd/schema.py", line 94, in load child.dereference() File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/xsd/schema.py", line 319, in dereference midx, deps = x.dependencies() File "/home/wlp13/work/venv/lib/python3.3/site-packages/suds/xsd/sxbasic.py", line 275, in dependencies raise TypeNotFound(self.ref) suds.TypeNotFound: Type not found: '(Array, http://schemas.xmlsoap.org/soap/encoding/, )'
Офлайн
Вопрос был решен с помощью стандартной документации, которую надо было читать внимательнее.
Дело в том, что существует много случаев, когда схемы определенные в WSDL или импортируемые, бывают разбиты.(Причины бывают разные)
Для это случая есть модуль Doctor с набором классов для починки.
Конкретно в моем случае, я не указывал место импорта.
from suds.client import Client from suds.xsd.doctor import ImportDoctor, Import url = "https://localhost/service/?wsdl" imp = Import('http://schemas.xmlsoap.org/soap/encoding/') doctor = ImportDoctor(imp) client = Client(url, doctor=doctor, cache=None) print(client)
Офлайн