#!/usr/bin/env python
#
# Autogenerated by Thrift Compiler (0.9.2)
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#
#  options string: py:new_style,slots,dynamic
#

import sys
import pprint
from urlparse import urlparse
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.transport import TSSLSocket
from thrift.transport import THttpClient
from thrift.protocol import TBinaryProtocol

from ThriftTest import ThriftTest
from ThriftTest.ttypes import *

if len(sys.argv) <= 1 or sys.argv[1] == '--help':
  print('')
  print('Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] [-s[sl]] function [arg1 [arg2...]]')
  print('')
  print('Functions:')
  print('  void testVoid()')
  print('  string testString(string thing)')
  print('  byte testByte(byte thing)')
  print('  i32 testI32(i32 thing)')
  print('  i64 testI64(i64 thing)')
  print('  double testDouble(double thing)')
  print('  string testBinary(string thing)')
  print('  Xtruct testStruct(Xtruct thing)')
  print('  Xtruct2 testNest(Xtruct2 thing)')
  print('   testMap( thing)')
  print('   testStringMap( thing)')
  print('   testSet( thing)')
  print('   testList( thing)')
  print('  Numberz testEnum(Numberz thing)')
  print('  UserId testTypedef(UserId thing)')
  print('   testMapMap(i32 hello)')
  print('   testInsanity(Insanity argument)')
  print('  Xtruct testMulti(byte arg0, i32 arg1, i64 arg2,  arg3, Numberz arg4, UserId arg5)')
  print('  void testException(string arg)')
  print('  Xtruct testMultiException(string arg0, string arg1)')
  print('  void testOneway(i32 secondsToSleep)')
  print('')
  sys.exit(0)

pp = pprint.PrettyPrinter(indent = 2)
host = 'localhost'
port = 9090
uri = ''
framed = False
ssl = False
http = False
argi = 1

if sys.argv[argi] == '-h':
  parts = sys.argv[argi+1].split(':')
  host = parts[0]
  if len(parts) > 1:
    port = int(parts[1])
  argi += 2

if sys.argv[argi] == '-u':
  url = urlparse(sys.argv[argi+1])
  parts = url[1].split(':')
  host = parts[0]
  if len(parts) > 1:
    port = int(parts[1])
  else:
    port = 80
  uri = url[2]
  if url[4]:
    uri += '?%s' % url[4]
  http = True
  argi += 2

if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
  framed = True
  argi += 1

if sys.argv[argi] == '-s' or sys.argv[argi] == '-ssl':
  ssl = True
  argi += 1

cmd = sys.argv[argi]
args = sys.argv[argi+1:]

if http:
  transport = THttpClient.THttpClient(host, port, uri)
else:
  socket = TSSLSocket.TSSLSocket(host, port, validate=False) if ssl else TSocket.TSocket(host, port)
  if framed:
    transport = TTransport.TFramedTransport(socket)
  else:
    transport = TTransport.TBufferedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftTest.Client(protocol)
transport.open()

if cmd == 'testVoid':
  if len(args) != 0:
    print('testVoid requires 0 args')
    sys.exit(1)
  pp.pprint(client.testVoid())

elif cmd == 'testString':
  if len(args) != 1:
    print('testString requires 1 args')
    sys.exit(1)
  pp.pprint(client.testString(args[0],))

elif cmd == 'testByte':
  if len(args) != 1:
    print('testByte requires 1 args')
    sys.exit(1)
  pp.pprint(client.testByte(eval(args[0]),))

elif cmd == 'testI32':
  if len(args) != 1:
    print('testI32 requires 1 args')
    sys.exit(1)
  pp.pprint(client.testI32(eval(args[0]),))

elif cmd == 'testI64':
  if len(args) != 1:
    print('testI64 requires 1 args')
    sys.exit(1)
  pp.pprint(client.testI64(eval(args[0]),))

elif cmd == 'testDouble':
  if len(args) != 1:
    print('testDouble requires 1 args')
    sys.exit(1)
  pp.pprint(client.testDouble(eval(args[0]),))

elif cmd == 'testBinary':
  if len(args) != 1:
    print('testBinary requires 1 args')
    sys.exit(1)
  pp.pprint(client.testBinary(args[0],))

elif cmd == 'testStruct':
  if len(args) != 1:
    print('testStruct requires 1 args')
    sys.exit(1)
  pp.pprint(client.testStruct(eval(args[0]),))

elif cmd == 'testNest':
  if len(args) != 1:
    print('testNest requires 1 args')
    sys.exit(1)
  pp.pprint(client.testNest(eval(args[0]),))

elif cmd == 'testMap':
  if len(args) != 1:
    print('testMap requires 1 args')
    sys.exit(1)
  pp.pprint(client.testMap(eval(args[0]),))

elif cmd == 'testStringMap':
  if len(args) != 1:
    print('testStringMap requires 1 args')
    sys.exit(1)
  pp.pprint(client.testStringMap(eval(args[0]),))

elif cmd == 'testSet':
  if len(args) != 1:
    print('testSet requires 1 args')
    sys.exit(1)
  pp.pprint(client.testSet(eval(args[0]),))

elif cmd == 'testList':
  if len(args) != 1:
    print('testList requires 1 args')
    sys.exit(1)
  pp.pprint(client.testList(eval(args[0]),))

elif cmd == 'testEnum':
  if len(args) != 1:
    print('testEnum requires 1 args')
    sys.exit(1)
  pp.pprint(client.testEnum(eval(args[0]),))

elif cmd == 'testTypedef':
  if len(args) != 1:
    print('testTypedef requires 1 args')
    sys.exit(1)
  pp.pprint(client.testTypedef(eval(args[0]),))

elif cmd == 'testMapMap':
  if len(args) != 1:
    print('testMapMap requires 1 args')
    sys.exit(1)
  pp.pprint(client.testMapMap(eval(args[0]),))

elif cmd == 'testInsanity':
  if len(args) != 1:
    print('testInsanity requires 1 args')
    sys.exit(1)
  pp.pprint(client.testInsanity(eval(args[0]),))

elif cmd == 'testMulti':
  if len(args) != 6:
    print('testMulti requires 6 args')
    sys.exit(1)
  pp.pprint(client.testMulti(eval(args[0]),eval(args[1]),eval(args[2]),eval(args[3]),eval(args[4]),eval(args[5]),))

elif cmd == 'testException':
  if len(args) != 1:
    print('testException requires 1 args')
    sys.exit(1)
  pp.pprint(client.testException(args[0],))

elif cmd == 'testMultiException':
  if len(args) != 2:
    print('testMultiException requires 2 args')
    sys.exit(1)
  pp.pprint(client.testMultiException(args[0],args[1],))

elif cmd == 'testOneway':
  if len(args) != 1:
    print('testOneway requires 1 args')
    sys.exit(1)
  pp.pprint(client.testOneway(eval(args[0]),))

else:
  print('Unrecognized method %s' % cmd)
  sys.exit(1)

transport.close()
