ZopeMag's mascot the ZOPE fish

Listing 4b - Second part of the Webservice

44. class Player:
45.     '''Input class.'''
46.     def __init__(self, name):
47.         pass

48. Player.typecode = TC.Struct(Player, [
49.           TC.String('Name', optional=1),
50.           TC.Array('xsd:integer', TC.Integer(), 'Scores'),
51.           ], 'GetAverage')

52. class Average:
53.     '''Output class.'''
54.     def __init__(self, average):
55.         self.average = average

56. Average.typecode = TC.Struct(Average, [
57.                              TC.Integer('average'),
58.                              ], 'GetAverageResponse', inline=1)

59. try:
60.     player = ps.Parse(Player)
61. except EvaluateException, e:
62.     FaultFromZSIException(e).AsSOAP(OUT) 
63.     REQUEST.RESPONSE.setBody(OUT.getvalue())
64.     REQUEST.RESPONSE.setHeader('Content-Type', 'text/xml', 0)
65.     return REQUEST.RESPONSE

66. def foo(total, len):

67.     return (total / len)

68. try:
69.     import operator
70.     total = reduce(operator.add, player.Scores, 0)
71.     result = Average(foo(total, len(player.Scores)))
72.     SoapWriter(OUT).serialize(result)
73. except Exception, e:
74.     FaultFromException(e, 0, sys.exc_info()[2]).AsSOAP(OUT) 
75.     REQUEST.RESPONSE.setBody(OUT.getvalue())
76.     REQUEST.RESPONSE.setHeader('Content-Type', 'text/xml', 0)
77.     return REQUEST.RESPONSE

78. REQUEST.RESPONSE.setBody(OUT.getvalue())
79. REQUEST.RESPONSE.setHeader('Content-Type', 'text/xml', 0)
80. return REQUEST.RESPONSE



Home   Subscribe   FAQ   Contact   Write for us   Privacy Policy   Weekly News   PyZine   opensourcexperts.com  

Reproduction of material from any of ZopeMag's pages without prior written permission is strictly prohibited. Copyright 2003 - 2005 ZopeMag Zope/Plone hosting by Nidelven IT