Python / Zeep - Nillable элементы с вложенными элементами - PullRequest
0 голосов
/ 03 июня 2019

Я портирую старый php-скрипт на Python, используя zeep.Скрипт подключается к удаленному компьютеру через SOAP и периодически отправляет некоторые данные.Xsd определяется следующим образом:

ns1:UploadInventoryElement(inventoryElement: ns1:InventoryElement)
ns1:InventoryElement(name: xsd:string, fulfillDate: xsd:long, uniqueId: xsd:string, priority: ns1:Priority)
ns1:Priority(name: xsd:string, value: xsd:long)

И в php я вижу, что отправляемый конверт SOAP выглядит следующим образом:

<ns1:inventoryElement>
    <ns1:name>Item 1</ns1:name>
    <ns1:fulfillDate>1559558986</ns1:fulfillDate>
    <ns1:uniqueId>UF8009A</ns1:encoding>
    <ns1:priority xsi:nil="true"/>
</ns1:priority>

Теперь в Python, чтобы я сделал:

prio_type = document_client.get_type('ns1:priority')
prio_wrap = xsd.Element('priority', prio_type)
prio_value = prio_wrap(zeep.xsd.Nil)

И сгенерированный конверт SOAP выглядит следующим образом:

<ns0:inventoryElement>
    <ns1:name>Item 1</ns1:name>
    <ns2:fulfillDate>1559558986</ns1:fulfillDate>
    <ns3:uniqueId>UF8009A</ns1:encoding>
    <ns4:priority>
        <ns4:name xsi:nil="true"/>
        <ns4:value xsi:nil="true" />
</ns1:priority>

Однако сервер отклонил его с очень бесполезной «нулевой» ошибкой.Теперь я предполагаю, что проблема в элементе приоритета, который, кажется, является единственным различием между обоими конвертами.Итак, мой вопрос: есть ли способ сделать элемент приоритета nil и удалить подэлементы, как в примере php?

...