Ответ 1
Это известная ошибка в пеной https://fedorahosted.org/suds/ticket/342
как сгенерировать запрос к методу с аргументами "выбор"?
часть wsdl в http://127.0.0.1/service?wsdl:
<xs:complexType name="ByA"> <xs:sequence> ... </xs:sequence> </xs:complexType> <xs:complexType name="ByB"> <xs:sequence> ... </xs:sequence> </xs:complexType> <xs:complexType name="GetMethodRequest"> <xs:choice> <xs:element name="byA" type="s0:ByA" /> <xs:element name="byB" type="s0:ByB" /> </xs:choice> </xs:complexType>
когда я это делаю
from suds.client import Client
client = Client("http://127.0.0.1/service?wsdl")
print client
Я вижу
GetMethod()
без каких-либо аргументов.
как я могу вызвать GetMethod с помощью byA или withB?
Это известная ошибка в пеной https://fedorahosted.org/suds/ticket/342
Я зафиксировал его так:
class MyPlugin(DocumentPlugin):
def setChoice(self, context):
if not context.children:
return
for i in context.children:
if i.name == "choice":
for j in i.children:
i.parent.append(j)
else:
self.setChoice(i)
def parsed(self, context):
self.setChoice(context.document)
plugin = MyPlugin()
client = Client("http://127.0.0.1/service?wsdl", plugins=[plugin])
Не знаю, не увидев весь wsdl, ваша ссылка на вашу локальную машину.
Класс Suds Client использует Service Class как переменную экземпляра для взаимодействия с wsdl. Вы пробовали что-то вроде этого?
from suds.client import Client
client = Client("http://127.0.0.1/service?wsdl")
client.service.GetMethod("byA")
или
client.service.GetMethod("byB")