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

0 投票
1 回答
613 浏览
提问于 2025-04-18 12:54

这里有一个请求的例子:

<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) 这样的方式调用的,其中 params 类似于 params = {'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

你可以使用 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)

撰写回答