Python Suds: как получить xsd: timeInstant вместо xsd: date в запросе? - PullRequest
0 голосов
/ 26 октября 2011

Я пытаюсь работать с веб-сервисом, для которого в запросе требуется 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:, которая отклоняется сервером.

<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 голосов
/ 27 октября 2011

Думаю, я нашел решение, так что, возможно, также опубликуйте ответ для дальнейшего использования.

В файле suds / xsd / sxbuiltin.py есть класс Factory

class Factory:

    tags =\
    {
        # any
        'anyType' : XAny,
        ...
        # dates & times
        ...
        'gMonth' : XString,

В gMonth я добавил

'timeInstant' : XString,

WSDL-тип xsd: timeInstant теперь копируется правильно.XML-запрос SOAP показывает это:

<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>

И сервер может обрабатывать этот ввод.

...