Hi,
I have a soaplib server (emulating a Java server) which does this:
from soaplib.serializers.primitive import String, Integer, DateTime, Array, Fault from soaplib.serializers.clazz import ClassSerializer
from soaplib.service import SoapServiceBase from soaplib.service import soapmethod
class Transaction(ClassSerializer):
class types: cost = Integer purchaseDate = DateTime status = Integer
class HistoryResponse(ClassSerializer):
class types: transactions = Array(Transaction) totalRecords = Integer
class TransactionService(SoapServiceBase):
@soapmethod(String, Integer, DateTime, DateTime, Integer, _returns=HistoryResponse) def getHistory(self, tokenId, status, dateFrom, dateTo, pageId):
transactionsList = createAPythonListOfTransactionObjects() response = HistoryResponse() response.transactions = transactionsList response.totalRecords = 1000
In Suds (in another process), when I get back the results from calling getHistory(), the return value prints like this:
(HistoryResponse){ totalRecords = 1000 transactions = (TransactionArray){ _type = "tns:TransactionArray" Transaction[] = (Transaction){ purchaseDate = 2010-02-28 12:00:00 cost = 1500 status = 8 }, (Transaction){ purchaseDate = 2010-02-28 12:00:00 cost = 1200 status = 2 }, } }
To loop over transactions, I have to do:
for item in response.transactions.Transaction: ...
Which is pretty awkward. I also suspect that this may not always be necessary, as we had some other mocks going with SoapUI where it was sufficient to iterate over response.transactions directly.
Am I doing something wrong?
Cheers, Martin