Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 3, 2014 21:06:55

corvus
Зарегистрирован: 2014-04-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Soap, suds, python3 - нужна помощь.

Добрый вечер.
Очень нужна помощь.
Есть проблема(или недопонимание) с библиотекой 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/, )'

Гугление проблемы мне результата не дало.
Есть у кого предложения?

Офлайн

#2 Апрель 5, 2014 18:01:26

corvus
Зарегистрирован: 2014-04-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Soap, suds, python3 - нужна помощь.

Вопрос был решен с помощью стандартной документации, которую надо было читать внимательнее.

Дело в том, что существует много случаев, когда схемы определенные в 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)
Вот ссылка на документация.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version