Zeep - AttributeError: у объекта 'Schema' нет атрибута 'render' - PullRequest
0 голосов
/ 14 октября 2019

Проблема

Я пытаюсь использовать модуль Zeep для доступа к протоколу SOAP, но я думаю, что в документе WSDL отсутствуют некоторые вещи, и поэтому я не могу понятьименно те аргументы, которые ожидает метод ...

Вот соответствующая часть WSDL с методом, который я пытаюсь использовать:

<s:element name="EnviaSMSDataSet">
<s:complexType>
    <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="NumUsu" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="Senha" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="DS">
            <s:complexType>
                <s:sequence>
                    <s:element ref="s:schema"/>
                    <s:any/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:sequence>
</s:complexType>

И я называю этот метод так:

client.service.EnviaSMSDataSet(NumUsu=<username>, Senha=<password>, DS=<?>)

Но я не знаю, что мне следует указывать в аргументе DS !


Что я пробовал до сих пор

Если я опущу аргумент, Python скажет мне следующее:

zeep.exceptions.Fault: Server was unable to process request. ---> Object reference not set to an instance of an object.

Если я напишу что-то другое, кроме DSkeyarg, Python выдает мне эту ошибку:

TypeError: {https://www.twwwireless.com.br/reluzcap/wsreluzcap}EnviaSMSDataSet() got an unexpected keyword argument 'test'. Signature: `NumUsu: xsd:string, Senha: xsd:string, DS: {schema: , _value_1: ANY}`

Если я передаю пустой словарь DS keyarg, Python выдает мне эту ошибку вместо этого:

AttributeError: 'Schema' object has no attribute 'min_occurs'

И если я пытаюсь написатьчто-то внутри него, Python вызывает еще одну ошибку:

AttributeError: 'Schema' object has no attribute 'render'

Zeep , по-видимому, также имеет метод для сбора сложных типов ( client.get_type () ),но я не знаю точно, есть ли тип для этого ...?


Поддержка

Я связался со службой поддержки, и они привели мне примердействительного запроса, но я не мог понять его правильно:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <EnviaSMSDataSet xmlns="https://www.twwwireless.com.br/reluzcap/wsreluzcap">
            <NumUsu>LOGIN</NumUsu>
            <Senha>SENHA</Senha>
            <DS>
                <xs:schema id="myDataSet"
                    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                    <xs:element name="myDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                        <xs:complexType>
                            <xs:choice minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="enviaSMSDataset">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="seunum" type="xs:string"minOccurs="0"/>
                                            <xs:element name="celular" type="xs:string"minOccurs="0"/>
                                            <xs:element name="mensagem" type="xs:string"minOccurs="0"/>
                                            <xs:element name="agendamento" type="xs:dateTime"minOccurs="0"/>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                </xs:schema>
                <diffgr:diffgram
                    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                    <myDataSet>
                        <enviaSMSDataset diffgr:id="enviaSMSDataset1" msdata:rowOrder="1">
                            <seunum xml:space="preserve">saass</seunum>
                            <celular>5511999999999</celular>
                            <mensagem>Olá Mundo</mensagem>
                            <agendamento>2013-02-22T08:22:54</agendamento>
                        </enviaSMSDataset>
                        <enviaSMSDataset diffgr:id="enviaSMSDataset2" msdata:rowOrder="2">
                            <seunum xml:space="preserve">asdd</seunum>
                            <celular>5511999999991</celular>
                            <mensagem>Olá Mundo</mensagem>
                            <agendamento>2013-02-22T08:22:54</agendamento>
                        </enviaSMSDataset>
                    </myDataSet>
                </diffgr:diffgram>
            </DS>
        </EnviaSMSDataSet>
    </soap:Body>
</soap:Envelope>

Если отсутствует какое-либо объяснение или что-то, я был бы рад предоставить!

( Это - это полный документ WSDL, если, кстати, это поможет!)

...