如何在suds参数中设置请求的属性?

时间:2014-07-11 08:08:00

标签: python xml soap suds

这是一个和平的要求:

<ContinuousMove xmlns="http://www.onvif.org/ver20/ptz/wsdl">
    <ProfileToken>0</ProfileToken>
    <Velocity>
        <PanTilt x="-0.5" y="0" xmlns="http://www.onvif.org/ver10/schema"/>
    </Velocity>
</ContinuousMove>

此请求的调用方式与self._client.service.ContinuousMove(0, params)相同,其中paramsparams = {'PanTilt': [{'x': -0.5}, {'y': 0.5}]}类似。主要问题是我无法弄清楚如何为请求添加属性,而不是值。在对象上抛出错误,找不到类型,在元组上生成这个xml:

<ns0:ContinuousMove>
 <ns0:ProfileToken>0</ns0:ProfileToken>
 <ns0:Velocity>
    <ns1:PanTilt>x</ns1:PanTilt>
    <ns1:PanTilt>0.5</ns1:PanTilt>
    <ns1:PanTilt>y</ns1:PanTilt>
    <ns1:PanTilt>0</ns1:PanTilt>
 </ns0:Velocity>
</ns0:ContinuousMove>

1 个答案:

答案 0 :(得分:0)

您可以使用suds.client.Client.factory.create创建参数。

这是我写过的一个例子:

query_param = client.factory.create("QueryCriteriaBaseOfMyTaskCriteria")

pagination_model = client.factory.create("PaginationModel")
pagination_model.PageSize = 5000
query_param.PagingInfo = pagination_model

task_criteria = client.factory.create("MyTaskCriteria")
task_criteria.LoginId = user
task_criteria.OriginatorLoginId = client.factory.create("ArrayOfInt")
task_criteria.OriginatorLoginId.int.append(int(APPLICANT))
task_criteria.ProcInstId = client.factory.create("ArrayOfInt")
if instId is not None:
    task_criteria.ProcInstId.int.append(instId)
task_criteria.ProcessCode = client.factory.create("ArrayOfString")
task_criteria.ProcessCode.string.append(PROCESSCODE)
task_criteria.Folio = ""
task_criteria.TaskStartDate = client.factory.create("DatePeriodModel")
task_criteria.ProcessStartDate = client.factory.create("DatePeriodModel")
query_param.QueryCriteria = task_criteria
ret = client.service.GetTaskList(query_param,apiKey)