Python Suds:如何在请求中获取xsd:timeInstant而不是xsd:date?

时间:2011-10-26 07:13:11

标签: python soap suds

我正在尝试使用需要xsd:timeInstant的Web服务(请参阅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 :(得分: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>

服务器能够处理此输入。