Аргументы операций Zeep Client и anytype - PullRequest
0 голосов
/ 15 мая 2019

Нужна помощь по завершению операции со списком.Код будет выглядеть примерно так:

client = Client(wsdl, plugins=[history, MyLoggingPlugin()])
client.service.list(?????,????)

Основываясь на этом отрывке из команды python3: python –m zeep wsdl_file:

Global elements:
  ....    
  ns0:list(ns0:ListRequest)
  ....

Global types:
  xsd:anyType
  ....
  ns0:BaseFilter(isAscending: xsd:boolean, pageNumber: xsd:int, 
recordsPerPage: xsd:int, maxRecordsPerPage: xsd:int)
  ....
Operations:
   ....
   list(filter: ns0:BaseFilter) -> objectId: ns0:ObjectId[]
   ....

Копаясь в документах, я понимаю, что ns0: BaseFilter являетсясложный элемент, и мне нужно будет использовать client.get_type.Итак, с помощью следующего кода я продвинулся и получил более близкие результаты.

myUserFilter = myBaseFilter(isAscending=True, pageNumber=0)
SendingXML = client.create_message(client.service, 'list', myUserFilter) `

Тогда SendingXML выглядит так:

   <ns0:list xmlns:ns0="http://www.strongmail.com/services/v2/schema">
      <ns0:filter>
        <ns0:isAscending>true</ns0:isAscending>
        <ns0:pageNumber>0</ns0:pageNumber>
      </ns0:filter>
    </ns0:list>
  </soap-env:Body>

Я не уверен, как получить дополнительные элементы нафильтрующий элемент line / header.<ns0:filter> Должно быть следующее (отсутствует ns0, так как это образец)

<filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="UserFilter">

1 Ответ

0 голосов
/ 15 мая 2019

По счастливой случайности, поскольку я не до конца понимаю документацию поставщиков и WSDL, я нашел решение для создания правильного xml.

Операция со списком ожидает ввод типа BaseFilter в качестве ввода, хотяесли я использую тип UserFilter, вместо этого он работал.Код изменился следующим образом.

myBaseFilter = client.get_type('ns0:UserFilter') #Changed from ns0:BaseFilter
myUserListReq = myBaseFilter(isAscending=True, pageNumber=0, recordsPerPage=10,maxRecordsPerPage=200)
SendingXML = client.create_message(client.service, 'list', myUserListReq)

Теперь SendingXML правильный.

  <soap-env:Body>
    <ns0:list xmlns:ns0="http://www.strongmail.com/services/v2/schema">
      <ns0:filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns0:UserFilter">
        <ns0:isAscending>true</ns0:isAscending>
        <ns0:pageNumber>0</ns0:pageNumber>
        <ns0:recordsPerPage>10</ns0:recordsPerPage>
        <ns0:maxRecordsPerPage>200</ns0:maxRecordsPerPage>
      </ns0:filter>
    </ns0:list>
  </soap-env:Body>

Надеюсь ... это может помочь кому-то в будущем.

Если у кого-либо естьидеи о том, как я мог бы найти это в выводе -m zeep WSDL_File, что было бы бонусом, поскольку я не уверен, с какими еще вещами я столкнусь.

...