如何使用suds添加新对象?

时间:2010-05-29 01:08:48

标签: python soap 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 个答案:

答案 0 :(得分:1)

你仍然需要用factory创建对象:

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

答案 1 :(得分:0)

脱离我的头顶(目前所有泡沫的东西都在工作)

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

这取决于定义SOAP连接的WSDL,但attributes也应该是WSDL中定义的结构。

答案 2 :(得分:0)

当我尝试创建“条目”时会发生这种情况:

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

答案 3 :(得分:0)

试试这个,类似的东西使用我的WSDL。

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

正如西蒙所说,它确实取决于你的WSDL。