blob: 426146fc9b4aa7afb3ad320d02c0b2b863452be6 [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 logging
24import sys
25
Chris Piro20c81ad2013-03-07 11:32:48 -050026sys.path.append('gen-py.tornado')
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090027sys.path.insert(0, glob.glob('../../lib/py/build/lib*')[0])
Chris Piro20c81ad2013-03-07 11:32:48 -050028
Chris Piro20c81ad2013-03-07 11:32:48 -050029from tutorial import Calculator
30from tutorial.ttypes import Operation, Work, InvalidOperation
31
32from thrift import TTornado
Chris Piro20c81ad2013-03-07 11:32:48 -050033from thrift.transport import TTransport
34from thrift.protocol import TBinaryProtocol
35
36from tornado import gen
37from tornado import ioloop
38
39
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090040@gen.coroutine
41def communicate():
Chris Piro20c81ad2013-03-07 11:32:48 -050042 # create client
43 transport = TTornado.TTornadoStreamTransport('localhost', 9090)
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090044 # open the transport, bail on error
45 try:
46 yield transport.open()
47 print('Transport is opened')
48 except TTransport.TTransportException as ex:
49 logging.error(ex)
50 raise gen.Return()
51
Chris Piro20c81ad2013-03-07 11:32:48 -050052 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
53 client = Calculator.Client(transport, pfactory)
54
Chris Piro20c81ad2013-03-07 11:32:48 -050055 # ping
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090056 yield client.ping()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090057 print("ping()")
Chris Piro20c81ad2013-03-07 11:32:48 -050058
59 # add
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090060 sum_ = yield client.add(1, 1)
61 print("1 + 1 = {0}".format(sum_))
Chris Piro20c81ad2013-03-07 11:32:48 -050062
63 # make a oneway call without a callback (schedule the write and continue
64 # without blocking)
65 client.zip()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090066 print("zip() without callback")
Chris Piro20c81ad2013-03-07 11:32:48 -050067
68 # make a oneway call with a callback (we'll wait for the stream write to
69 # complete before continuing)
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090070 client.zip()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090071 print("zip() with callback")
Chris Piro20c81ad2013-03-07 11:32:48 -050072
73 # calculate 1/0
74 work = Work()
75 work.op = Operation.DIVIDE
76 work.num1 = 1
77 work.num2 = 0
78
79 try:
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090080 quotient = yield client.calculate(1, work)
81 print("Whoa? You know how to divide by zero ? -> {0}".format(quotient))
Chris Piro20c81ad2013-03-07 11:32:48 -050082 except InvalidOperation as io:
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090083 print("InvalidOperation: {0}".format(io))
Chris Piro20c81ad2013-03-07 11:32:48 -050084
85 # calculate 15-10
86 work.op = Operation.SUBTRACT
87 work.num1 = 15
88 work.num2 = 10
89
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090090 diff = yield client.calculate(1, work)
91 print("15 - 10 = {0}".format(diff))
Chris Piro20c81ad2013-03-07 11:32:48 -050092
93 # getStruct
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090094 log = yield client.getStruct(1)
95 print("Check log: {0}".format(log.value))
Chris Piro20c81ad2013-03-07 11:32:48 -050096
97 # close the transport
98 client._transport.close()
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +090099 raise gen.Return()
Chris Piro20c81ad2013-03-07 11:32:48 -0500100
101
102def main():
103 # create an ioloop, do the above, then stop
Nobuaki Sukegawa2e00c992015-12-01 23:46:58 +0900104 ioloop.IOLoop.current().run_sync(communicate)
Chris Piro20c81ad2013-03-07 11:32:48 -0500105
106
107if __name__ == "__main__":
108 main()