Python sud中的自定义参数属性

Python sud中的自定义参数属性,python,wsdl,suds,Python,Wsdl,Suds,我的肥皂水有问题 我试图创建一个通用系统来调用API,一些参数被定义为具有多个属性的类。最初,所有这些属性都是空的,我试图传递一个字典来自动填充一些属性 例如: from suds.client import Client client = Client("...") method = "getCampaignsByCriteria" arg_repr = {"ids": [123]} arg = client.factory.create("CampaignSearchCriteria")

我的
肥皂水有问题

我试图创建一个通用系统来调用API,一些参数被定义为具有多个属性的类。最初,所有这些属性都是空的,我试图传递一个字典来自动填充一些属性

例如:

from suds.client import Client

client = Client("...")
method = "getCampaignsByCriteria"
arg_repr = {"ids": [123]}
arg = client.factory.create("CampaignSearchCriteria")
for k, v in arg_repr.iteritems():
    setattr(arg, k, v)
service = client.service
args_map = {"searchCriteria": arg}
getattr(service, method)(**args_map)
生成以下内容,其中
ActivitySearchCriteria
中的所有默认字段仍然存在,并且
ids
设置正确:

<SOAP-ENV:Body>
  <ns1:getCampaignsByCriteria>
     <searchCriteria xsi:type="ns1:CampaignSearchCriteria">
        <ids xsi:type="ns1:ArrayOf_xsd_long">123</ids>
        <searchString xsi:type="ns0:string"/>
        <pageNumber xsi:type="ns2:int"/>
        <pageSize xsi:type="ns2:int"/>
        <advertiserIds xsi:type="ns1:ArrayOf_xsd_long"/>
        <archiveFilter xsi:type="ns1:ActiveFilter">
           <activeOnly xsi:type="ns2:boolean"/>
           <inactiveOnly xsi:type="ns2:boolean"/>
        </archiveFilter>
        <sortOrder xsi:type="ns1:SortOrder">
           <descending xsi:type="ns2:boolean"/>
           <fieldName xsi:type="ns0:string"/>
        </sortOrder>
     </searchCriteria>
  </ns1:getCampaignsByCriteria>
</SOAP-ENV:Body>

我找不到在对方法使用自定义参数时如何选择要包含的字段。有什么想法吗?

SOAP请求的外观取决于WSDL,特别是指定消息模式的数据类型定义
因此,不能只省略一些字段,否则如果模式不允许,消息将不再是有效的请求

如果我是正确的,那么应该是我们正在讨论的wsdl,因为所有属性
minOccurs
都不存在,这意味着它默认为1,并且不能忽略元素,尽管它们是可为零的


我的一般建议是:不要过多考虑SOAP请求的外观。SOAP是xml,因此是人类可读的,但它并不是真正被设计为由人类解释的。

谢谢,我只是想这么做,因为如果SOAP请求中有空字段,相关API会抛出错误。我发现,由于suds 0.3.8+可以传递属性/值的字典,这将生成不带空字段的适当请求。关于wsdl,你是对的。谢谢你的帮助!
<SOAP-ENV:Body>
  <ns1:getCampaignsByCriteria>
     <searchCriteria xsi:type="ns1:CampaignSearchCriteria">
        <ids xsi:type="ns1:ArrayOf_xsd_long">123</ids>
     </searchCriteria>
  </ns1:getCampaignsByCriteria>
</SOAP-ENV:Body>