blob: eb132a10abf1b220dae25c6b128780ff76a7df38 [file] [log] [blame]
Mark Slee07a3aab2007-03-07 05:45:10 +00001#!/usr/bin/env python
2
David Reissea2cba82009-03-30 21:35:00 +00003#
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
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090022import glob
23import sys
Roger Meier1d66d062012-10-26 21:46:18 +000024sys.path.append('gen-py')
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090025sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
Mark Slee07a3aab2007-03-07 05:45:10 +000026
27from tutorial import Calculator
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090028from tutorial.ttypes import InvalidOperation, Operation
Mark Slee07a3aab2007-03-07 05:45:10 +000029
30from shared.ttypes import SharedStruct
31
32from thrift.transport import TSocket
33from thrift.transport import TTransport
34from thrift.protocol import TBinaryProtocol
35from thrift.server import TServer
36
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090037
Mark Slee07a3aab2007-03-07 05:45:10 +000038class CalculatorHandler:
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090039 def __init__(self):
40 self.log = {}
David Reiss0c90f6f2008-02-06 22:18:40 +000041
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090042 def ping(self):
43 print('ping()')
Mark Slee07a3aab2007-03-07 05:45:10 +000044
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090045 def add(self, n1, n2):
46 print('add(%d,%d)' % (n1, n2))
47 return n1 + n2
Mark Slee07a3aab2007-03-07 05:45:10 +000048
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090049 def calculate(self, logid, work):
50 print('calculate(%d, %r)' % (logid, work))
David Reiss0c90f6f2008-02-06 22:18:40 +000051
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090052 if work.op == Operation.ADD:
53 val = work.num1 + work.num2
54 elif work.op == Operation.SUBTRACT:
55 val = work.num1 - work.num2
56 elif work.op == Operation.MULTIPLY:
57 val = work.num1 * work.num2
58 elif work.op == Operation.DIVIDE:
59 if work.num2 == 0:
60 x = InvalidOperation()
61 x.whatOp = work.op
62 x.why = 'Cannot divide by 0'
63 raise x
64 val = work.num1 / work.num2
65 else:
66 x = InvalidOperation()
67 x.whatOp = work.op
68 x.why = 'Invalid operation'
69 raise x
Mark Slee07a3aab2007-03-07 05:45:10 +000070
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090071 log = SharedStruct()
72 log.key = logid
73 log.value = '%d' % (val)
74 self.log[logid] = log
Mark Slee07a3aab2007-03-07 05:45:10 +000075
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090076 return val
Mark Slee07a3aab2007-03-07 05:45:10 +000077
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090078 def getStruct(self, key):
79 print('getStruct(%d)' % (key))
80 return self.log[key]
Mark Slee07a3aab2007-03-07 05:45:10 +000081
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090082 def zip(self):
83 print('zip()')
David Reiss0c90f6f2008-02-06 22:18:40 +000084
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090085if __name__ == '__main__':
86 handler = CalculatorHandler()
87 processor = Calculator.Processor(handler)
88 transport = TSocket.TServerSocket(port=9090)
89 tfactory = TTransport.TBufferedTransportFactory()
90 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
Mark Slee07a3aab2007-03-07 05:45:10 +000091
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090092 server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
Mark Slee07a3aab2007-03-07 05:45:10 +000093
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +090094 # You could do one of these for a multithreaded server
Nobuaki Sukegawad479e232016-02-28 11:28:19 +090095 # server = TServer.TThreadedServer(
96 # processor, transport, tfactory, pfactory)
97 # server = TServer.TThreadPoolServer(
98 # processor, transport, tfactory, pfactory)
Mark Slee07a3aab2007-03-07 05:45:10 +000099
Nobuaki Sukegawa7e286b02016-01-11 11:25:09 +0900100 print('Starting the server...')
101 server.serve()
102 print('done.')