Я пытаюсь использовать Zeep для описания операций и типов в данном WSDL, чтобы программа знала имена операций, имена их параметров, типы параметров и атрибуты параметров.
Эта информация будет использоваться для динамического создания пользовательского интерфейса для данного WSDL.
То, что я получил до сих пор, это просто строковые представления операций и типов. Используя код, подобный тому, который найден в этом ответе .
Вот пример:
from zeep import Client
import operator
wsdl = 'http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl'
client = Client(wsdl)
# get each operation signature
for service in client.wsdl.services.values():
print("service:", service.name)
for port in service.ports.values():
operations = sorted(
port.binding._operations.values(),
key=operator.attrgetter('name'))
for operation in operations:
print("method :", operation.name)
print(" input :", operation.input.signature())
print()
print()
# get a specific type signature by name
complextype = client.get_type('ns0:CartGetRequest')
print(complextype.name)
print(complextype.signature())
Это дает вывод, подобный следующему (сокращенно для краткости)
[...]
method : CartCreate
input : MarketplaceDomain: xsd:string, AWSAccessKeyId: xsd:string, AssociateTag: xsd:string, Validate: xsd:string, XMLEscaping: xsd:string, Shared: ns0:CartCreateRequest, Request: ns0:CartCreateRequest[]
method : CartGet
input : MarketplaceDomain: xsd:string, AWSAccessKeyId: xsd:string, AssociateTag: xsd:string, Validate: xsd:string, XMLEscaping: xsd:string, Shared: ns0:CartGetRequest, Request: ns0:CartGetRequest[]
[...]
CartGetRequest
{http://webservices.amazon.com/AWSECommerceService/2011-08-01}CartGetRequest(CartId: xsd:string, HMAC: xsd:string, MergeCart: xsd:string, ResponseGroup: xsd:string[])
Строковые представления, возвращаемые .signature (), имеют имена и типы, но я не знаю, как анализировать их по отдельности. Я пробовал зацикливаться на объектах attrs с помощью dir (), и они не содержат эту информацию. Кажется, что оно гораздо глубже.
Я мог бы проанализировать сами строковые представления, но тогда мне также не хватает, является ли параметр необязательным (более конкретно, если он имеет атрибут minOccurs = 0
Кажется, что SOAPpy на самом деле имеет эту функцию , но больше не поддерживается.
Так есть ли способ проанализировать WSDL с помощью zeep, который предоставляет детальную информацию о каждой операции, ее именах параметров, типах и атрибутах, аналогичных реализации SOAPpy? Или я должен проанализировать подпись или, альтернативно, проанализировать WSDL с помощью обычного синтаксического анализатора XML.