Skip to content

Instantly share code, notes, and snippets.

@gmonnerat
Created August 5, 2012 18:40
Show Gist options
  • Save gmonnerat/3266621 to your computer and use it in GitHub Desktop.
Save gmonnerat/3266621 to your computer and use it in GitHub Desktop.
#
# Model
#
from spyne.decorator import rpc
from spyne.model.complex import ComplexModel
from spyne.model.complex import Array
from spyne.model.primitive import Integer
from spyne.model.primitive import String
class Address(ComplexModel):
__namespace__ = "address"
city = String
number = Integer
street = String
class User(ComplexModel):
__namespace__ = "user"
Name = String
Address = Array(Address)
class Agenda(ComplexModel):
__namespace__ = "agenda"
User = Array(User)
@rpc(Agenda, _returns=String)
def receiveUser(ctx, agenda):
return etree.tostring(ctx.in_document, pretty_print=True)
#
# Client
#
from datetime import date, datetime
from suds.client import Client
client = Client("http://url")
agenda = client.factory.create("{agenda}Agenda")
user = client.factory.create("{user}User")
user.Name = "Gabriel"
address1 = client.factory.create("{address}Address")
address1.city = "London"
address1.number = 64
address1.street = "XYZ"
address2 = client.factory.create("{address}Address")
address2.city = "Paris"
address2.number = 34
address2.street = "ERT"
user.Address.Address.append(address1)
user.Address.Address.append(address2)
agenda.User.User.append(user)
print client.service.receiveUser(agenda)
"""
Output:
<SOAP-ENV:Envelope xmlns:ns3="example" xmlns:ns0="user" xmlns:ns1="agenda" xmlns:ns2="address" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns4:Body>
<ns3:receiveUser>
<ns3:agenda>
<ns1:User>
<ns0:User> XXX - As user can see one User inside another User
<ns0:Name>Gabriel</ns0:Name>
<ns0:Address>
<ns2:Address> XXX - As user can see one Address inside another Address
<ns2:city>London</ns2:city>
<ns2:number>64</ns2:number>
<ns2:street>XYZ</ns2:street>
</ns2:Address>
<ns2:Address>
<ns2:city>Paris</ns2:city>
<ns2:number>34</ns2:number>
<ns2:street>ERT</ns2:street>
</ns2:Address>
</ns0:Address>
</ns0:User>
</ns1:User>
</ns3:agenda>
</ns3:receiveUser>
</ns4:Body>
</SOAP-ENV:Envelope>
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment