THRIFT-3295 C# library does not build on Mono 4.0.2.5 or later
[thrift.git] / tutorial / py / PythonClient.py
1 #!/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
22 import sys, glob
23 sys.path.append('gen-py')
24 sys.path.insert(0, glob.glob('../../lib/py/build/lib.*')[0])
25
26 from tutorial import Calculator
27 from tutorial.ttypes import *
28
29 from thrift import Thrift
30 from thrift.transport import TSocket
31 from thrift.transport import TTransport
32 from thrift.protocol import TBinaryProtocol
33
34 try:
35
36   # Make socket
37   transport = TSocket.TSocket('localhost', 9090)
38
39   # Buffering is critical. Raw sockets are very slow
40   transport = TTransport.TBufferedTransport(transport)
41
42   # Wrap in a protocol
43   protocol = TBinaryProtocol.TBinaryProtocol(transport)
44
45   # Create a client to use the protocol encoder
46   client = Calculator.Client(protocol)
47
48   # Connect!
49   transport.open()
50
51   client.ping()
52   print 'ping()'
53
54   sum = client.add(1,1)
55   print '1+1=%d' % (sum)
56
57   work = Work()
58
59   work.op = Operation.DIVIDE
60   work.num1 = 1
61   work.num2 = 0
62
63   try:
64     quotient = client.calculate(1, work)
65     print 'Whoa? You know how to divide by zero?'
66   except InvalidOperation, io:
67     print 'InvalidOperation: %r' % io
68
69   work.op = Operation.SUBTRACT
70   work.num1 = 15
71   work.num2 = 10
72
73   diff = client.calculate(1, work)
74   print '15-10=%d' % (diff)
75
76   log = client.getStruct(1)
77   print 'Check log: %s' % (log.value)
78
79   # Close!
80   transport.close()
81
82 except Thrift.TException, tx:
83   print '%s' % (tx.message)