で困っていsuds
ます。
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)
CampaignSearchCriteria
そこからのすべてのデフォルトフィールドを使用して、次を生成し、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>
ただし、私はids
フィールドを設定しているだけなので、SOAP 本体が次のように空でないフィールドを考慮に入れるようにしたいと思います。
<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>
メソッドにカスタム引数を使用しているときに、含めるフィールドを選択する方法が見つかりませんでした。何かご意見は?