Python Suds:如何在请求中获取xsd:timeInstant而不是xsd:date?
我正在尝试使用一个网络服务,它在请求中需要 xsd:timeInstant(可以在 WSDL 中查看):
<xsd:complexType name="QueryParams">
<xsd:all>
<xsd:element name="start" type="xsd:timeInstant" minOccurs="0"/>
<xsd:element name="stop" type="xsd:timeInstant" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
因此,生成的 SOAP XML 请求应该包含类似这样的内容:
<start xsi:type="xsd:timeInstant">2009-05-10T17:00:00Z</start>
<stop xsi:type="xsd:timeInstant">2009-05-11T17:00:00Z</stop>
我使用 SUDS 创建了以下对象:
qp = client.factory.create("ns0:QueryParams")
qp.start = "2009-05-10T17:00:00Z"
qp.stop = "2009-06-10T17:00:00Z"
不幸的是,SUDS 把这个转换成了 xsd:date,而服务器不接受这个格式。
<query xsi:type="ns3:QueryParams">
<start xsi:type="ns1:date">2009-05-10T17:00:00Z</start>
<stop xsi:type="ns1:date">2009-06-10T17:00:00Z</stop>
</query>
有没有什么办法可以强制使用 xsd:timeInstant?
1 个回答
0
我想我找到了问题的解决办法,所以干脆把答案发出来,方便以后参考。
在suds/xsd/sxbuiltin.py这个文件里,有一个叫做Factory的类。
class Factory:
tags =\
{
# any
'anyType' : XAny,
...
# dates & times
...
'gMonth' : XString,
在gMonth下面,我添加了
'timeInstant' : XString,
现在,WSDL类型xsd:timeInstant可以正确复制了。SOAP请求的XML看起来是这样的:
<query xsi:type="ns3:QueryParams">
<start xsi:type="ns1:timeInstant">2009-05-10T17:00:00Z</start>
<stop xsi:type="ns1:timeInstant">2009-06-10T17:00:00Z</stop>
</query>
而且服务器能够处理这个输入。