blob: 419821468c4ee8a3c7877f79c2274efc0801ef4e [file] [log] [blame]
Chris Piro20c81ad2013-03-07 11:32:48 -05001#!/usr/bin/env python
2
3#
4# Licensed to the Apache Software Foundation (ASF) under one
5# or more contributor license agreements. See the NOTICE file
6# distributed with this work for additional information
7# regarding copyright ownership. The ASF licenses this file
8# to you under the Apache License, Version 2.0 (the
9# "License"); you may not use this file except in compliance
10# with the License. You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing,
15# software distributed under the License is distributed on an
16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17# KIND, either express or implied. See the License for the
18# specific language governing permissions and limitations
19# under the License.
20#
21
22import sys
23import glob
24sys.path.append('gen-py.tornado')
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090025sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
Chris Piro20c81ad2013-03-07 11:32:48 -050026
27from tutorial import Calculator
28from tutorial.ttypes import Operation, InvalidOperation
29
30from shared.ttypes import SharedStruct
31
32from thrift import TTornado
33from thrift.transport import TSocket
34from thrift.transport import TTransport
35from thrift.protocol import TBinaryProtocol
36from thrift.server import TServer
37
38from tornado import ioloop
39
40
41class CalculatorHandler(object):
42 def __init__(self):
43 self.log = {}
44
45 def ping(self, callback):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090046 print("ping()")
Chris Piro20c81ad2013-03-07 11:32:48 -050047 callback()
48
49 def add(self, n1, n2, callback):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090050 print("add({}, {})".format(n1, n2))
Chris Piro20c81ad2013-03-07 11:32:48 -050051 callback(n1 + n2)
52
53 def calculate(self, logid, work, callback):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090054 print("calculate({}, {})".format(logid, work))
Chris Piro20c81ad2013-03-07 11:32:48 -050055
56 if work.op == Operation.ADD:
57 val = work.num1 + work.num2
58 elif work.op == Operation.SUBTRACT:
59 val = work.num1 - work.num2
60 elif work.op == Operation.MULTIPLY:
61 val = work.num1 * work.num2
62 elif work.op == Operation.DIVIDE:
63 if work.num2 == 0:
64 x = InvalidOperation()
Konrad Grochowski3b115df2015-05-18 17:58:36 +020065 x.whatOp = work.op
Chris Piro20c81ad2013-03-07 11:32:48 -050066 x.why = "Cannot divide by 0"
67 raise x
68 val = work.num1 / work.num2
69 else:
70 x = InvalidOperation()
Konrad Grochowski3b115df2015-05-18 17:58:36 +020071 x.whatOp = work.op
Chris Piro20c81ad2013-03-07 11:32:48 -050072 x.why = "Invalid operation"
73 raise x
74
75 log = SharedStruct()
76 log.key = logid
77 log.value = '%d' % (val)
78 self.log[logid] = log
79 callback(val)
80
81 def getStruct(self, key, callback):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090082 print("getStruct({})".format(key))
Chris Piro20c81ad2013-03-07 11:32:48 -050083 callback(self.log[key])
84
85 def zip(self, callback):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090086 print("zip()")
Chris Piro20c81ad2013-03-07 11:32:48 -050087 callback()
88
89
90def main():
91 handler = CalculatorHandler()
92 processor = Calculator.Processor(handler)
93 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
94 server = TTornado.TTornadoServer(processor, pfactory)
95
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090096 print("Starting the server...")
Chris Piro20c81ad2013-03-07 11:32:48 -050097 server.bind(9090)
98 server.start(1)
99 ioloop.IOLoop.instance().start()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900100 print("done.")
Chris Piro20c81ad2013-03-07 11:32:48 -0500101
102
103if __name__ == "__main__":
104 main()