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
|