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

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

from sdk6_rte import RunTimeEnvironment
from sdk6_rte.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]] function [arg1 [arg2...]]'
  print ''
  print 'Functions:'
  print '  string sys_ping()'
  print '  void sys_echo(string echo_msg)'
  print '  void sys_shutdown()'
  print '  string sys_version_get()'
  print '  LogLevel sys_log_level_get()'
  print '  RteReturn sys_log_level_set(LogLevel level)'
  print '  RteReturn design_load(DesignLoadArgs arguments)'
  print '  RteReturn design_unload()'
  print '  RteReturn design_reconfig(string pif_config_json)'
  print '  DesignLoadStatus design_load_status()'
  print '   ports_info_retrieve()'
  print '   table_list_all()'
  print '  RteReturn table_entry_add(i32 tbl_id, TableEntry entry)'
  print '  RteReturn table_entry_edit(i32 tbl_id, TableEntry entry)'
  print '  RteReturn table_entry_delete(i32 tbl_id, TableEntry entry)'
  print '   table_retrieve(i32 tbl_id)'
  print '  i64 table_version_get()'
  print '   parser_value_set_list_all()'
  print '  RteReturn parser_value_set_add(i32 pvs_id,  entries)'
  print '  RteReturn parser_value_set_clear(i32 pvs_id)'
  print '   parser_value_set_retrieve(i32 pvs_id)'
  print '   p4_counter_list_all()'
  print '  P4CounterReturn p4_counter_retrieve(i32 counter_id)'
  print '  RteReturn p4_counter_clear(i32 counter_id)'
  print '  RteReturn p4_counter_clear_all()'
  print '   register_list_all()'
  print '   register_retrieve(RegisterArrayArg regarr)'
  print '  RteReturn register_clear(RegisterArrayArg regarr)'
  print '  RteReturn register_field_set(RegisterArrayArg regarr, i32 field_id, string value)'
  print '  RteReturn register_set(RegisterArrayArg regarr,  values)'
  print '   sys_counter_retrieve_all()'
  print '  RteReturn sys_counter_clear_all()'
  print '   mcast_config_get_all()'
  print '  McastCfgEntry mcast_config_get(i32 mcast_group)'
  print '  RteReturn mcast_config_set(McastCfgEntry cfg)'
  print '   meter_list_all()'
  print '   meter_config_get(i32 meter_id)'
  print '  RteReturn meter_config_set(i32 meter_id,  cfgs)'
  print '   digest_list_all()'
  print '  i64 digest_register(i32 digest_id)'
  print '  RteReturn digest_deregister(i64 digest_regid)'
  print '   digest_retrieve(i64 digest_regid)'
  print '  RteReturn traffic_class_set(i64 port_id,  cfgs)'
  print '  RteReturn traffic_class_commit(i64 port_id)'
  print '   traffic_class_get(i64 port_id)'
  print '  DebugCtlReturn debugctl(string debug_id, string debug_data)'
  print ''
  sys.exit(0)

pp = pprint.PrettyPrinter(indent = 2)
host = 'localhost'
port = 9090
uri = ''
framed = 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close()
