blob: e0229a26e095ca90c690d921de65d18d0adee124 [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
Chris Piro20c81ad2013-03-07 11:32:48 -050022import glob
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090023import sys
24
Chris Piro20c81ad2013-03-07 11:32:48 -050025sys.path.append('gen-py.tornado')
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090026sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
Chris Piro20c81ad2013-03-07 11:32:48 -050027
28from tutorial import Calculator
29from tutorial.ttypes import Operation, InvalidOperation
30
31from shared.ttypes import SharedStruct
32
33from thrift import TTornado
Chris Piro20c81ad2013-03-07 11:32:48 -050034from thrift.protocol import TBinaryProtocol
Chris Piro20c81ad2013-03-07 11:32:48 -050035
36from tornado import ioloop
37
38
39class CalculatorHandler(object):
40 def __init__(self):
41 self.log = {}
42
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090043 def ping(self):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090044 print("ping()")
Chris Piro20c81ad2013-03-07 11:32:48 -050045
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090046 def add(self, n1, n2):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090047 print("add({}, {})".format(n1, n2))
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090048 return n1 + n2
Chris Piro20c81ad2013-03-07 11:32:48 -050049
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090050 def calculate(self, logid, work):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090051 print("calculate({}, {})".format(logid, work))
Chris Piro20c81ad2013-03-07 11:32:48 -050052
53 if work.op == Operation.ADD:
54 val = work.num1 + work.num2
55 elif work.op == Operation.SUBTRACT:
56 val = work.num1 - work.num2
57 elif work.op == Operation.MULTIPLY:
58 val = work.num1 * work.num2
59 elif work.op == Operation.DIVIDE:
60 if work.num2 == 0:
61 x = InvalidOperation()
Konrad Grochowski3b115df2015-05-18 17:58:36 +020062 x.whatOp = work.op
Chris Piro20c81ad2013-03-07 11:32:48 -050063 x.why = "Cannot divide by 0"
64 raise x
65 val = work.num1 / work.num2
66 else:
67 x = InvalidOperation()
Konrad Grochowski3b115df2015-05-18 17:58:36 +020068 x.whatOp = work.op
Chris Piro20c81ad2013-03-07 11:32:48 -050069 x.why = "Invalid operation"
70 raise x
71
72 log = SharedStruct()
73 log.key = logid
74 log.value = '%d' % (val)
75 self.log[logid] = log
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090076 return val
Chris Piro20c81ad2013-03-07 11:32:48 -050077
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090078 def getStruct(self, key):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090079 print("getStruct({})".format(key))
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090080 return self.log[key]
Chris Piro20c81ad2013-03-07 11:32:48 -050081
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090082 def zip(self):
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090083 print("zip()")
Chris Piro20c81ad2013-03-07 11:32:48 -050084
85
86def main():
87 handler = CalculatorHandler()
88 processor = Calculator.Processor(handler)
89 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
90 server = TTornado.TTornadoServer(processor, pfactory)
91
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090092 print("Starting the server...")
Chris Piro20c81ad2013-03-07 11:32:48 -050093 server.bind(9090)
94 server.start(1)
95 ioloop.IOLoop.instance().start()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090096 print("done.")
Chris Piro20c81ad2013-03-07 11:32:48 -050097
98
99if __name__ == "__main__":
100 main()