Как добавить новый объект с помощью suds? - PullRequest
3 голосов
/ 29 мая 2010

Я пытаюсь использовать suds, но до сих пор не удалось выяснить это.

Предполагается, что это необработанное мыльное сообщение, которого мне нужно достичь:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:api="http://api.service.apimember.soapservice.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <api:insertOrUpdateMemberByObj>
        <token>t67GFCygjhkjyUy8y9hkjhlkjhuii</token>
             <member>
                 <dynContent>
                     <entry>
                         <key>FIRSTNAME</key>
                         <value>hhhhbbbbb</value>
                     </entry>
                 </dynContent>
                 <email>test@test.com</email>
             </member>
         </api:insertOrUpdateMemberByObj>
     </soapenv:Body>
</soapenv:Envelope>

Поэтому я использую suds для создания объекта члена:

member = client.factory.create('member')

производит:

(apiMember){
   attributes =
      (attributes){
         entry[] = <empty>
      }
 }

Как именно я могу добавить «запись»?

Я пробовал это:

member.attributes.entry.append({'key':'FIRSTNAME','value':'test'})

, который производит это:

(apiMember){
   attributes =
      (attributes){
         entry[] =
            {
               value = "test"
               key = "FIRSTNAME"
            },
      }
 }

Однако, , что мне действительно нужно:

(apiMember){
   attributes =
      (attributes){
         entry[] =
            (entry) {
               value = "test"
               key = "FIRSTNAME"
            },
      }
 }

Как мне этого добиться?

Ответы [ 4 ]

1 голос
/ 30 августа 2012

вам все еще нужно создать объект с фабрикой:

member = client.factory.create('member')
entry = client.factory.create('member.attributes.entry')
entry.key = 'FIRSTNAME';
entry.value = 'test';
member.attributes.entry.append(entry)
0 голосов
/ 29 мая 2010

Вот что происходит, когда я пытаюсь создать "запись":

>>> member = client.factory.create('member')
>>> entry = client.factory.create('attributes')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build\bdist.win32\egg\suds\client.py", line 231, in create
suds.TypeNotFound: Type not found: 'attributes'
>>>
0 голосов
/ 02 июня 2010

Попробуйте, похожая вещь сработала при использовании моего WSDL.

member.attributes.entry = {'key':'FIRSTNAME','value':'test'}

Как сказал Саймон, это зависит от вашего WSDL.

0 голосов
/ 29 мая 2010

С макушки головы (на данный момент все вещи пены работают)

member = client.factory.create('member')
entry = client.factory.create('attributes')
entry.key="FIRSTNAME"
entry.value="test"
member.attributes.entry.append(entry)

Это зависит от WSDL, который определяет ваше SOAP-соединение, но attributes также должна быть структурой, определенной в WSDL.

...