Zeep Client操作参数和任何类型

时间:2019-05-15 01:21:34

标签: python-3.x wsdl arguments zeep

正在寻找有关如何完成列表操作的帮助。代码就像

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>

我不确定如何在过滤器元素行/标题上获取其他项目。 <ns0:filter> 应该是以下内容(因为这是一个示例,所以缺少ns0)

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

1 个答案:

答案 0 :(得分:0)

通过幸运的猜测,由于我不完全了解供应商文档和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输出中发现我有任何想法,那将是一个好处,因为我不确定我还会遇到什么其他事情。