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

import sys
import pprint
if sys.version_info[0] > 2:
    from urllib.parse import urlparse
else:
    from urlparse import urlparse
from thrift.transport import TTransport, TSocket, TSSLSocket, THttpClient
from thrift.protocol.TBinaryProtocol import TBinaryProtocol

from mapd import MapD
from mapd.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]] [-novalidate] [-ca_certs certs] [-keyfile keyfile] [-certfile certfile] function [arg1 [arg2...]]')
    print('')
    print('Functions:')
    print('  TSessionId connect(string user, string passwd, string dbname)')
    print('  void disconnect(TSessionId session)')
    print('  TServerStatus get_server_status(TSessionId session)')
    print('   get_tables(TSessionId session)')
    print('  TTableDetails get_table_details(TSessionId session, string table_name)')
    print('   get_users(TSessionId session)')
    print('   get_databases(TSessionId session)')
    print('  string get_version()')
    print('  void start_heap_profile(TSessionId session)')
    print('  void stop_heap_profile(TSessionId session)')
    print('  string get_heap_profile(TSessionId session)')
    print('  string get_memory_gpu(TSessionId session)')
    print('  TMemorySummary get_memory_summary(TSessionId session)')
    print('  void clear_cpu_memory(TSessionId session)')
    print('  void clear_gpu_memory(TSessionId session)')
    print('  TQueryResult sql_execute(TSessionId session, string query, bool column_format, string nonce, i32 first_n)')
    print('  TGpuDataFrame sql_execute_df(TSessionId session, string query, i32 first_n)')
    print('  TGpuDataFrame sql_execute_gpudf(TSessionId session, string query, i32 device_id, i32 first_n)')
    print('  void interrupt(TSessionId session)')
    print('  TTableDescriptor sql_validate(TSessionId session, string query)')
    print('  void set_execution_mode(TSessionId session, TExecuteMode mode)')
    print('  TRenderResult render_vega(TSessionId session, i64 widget_id, string vega_json, i32 compression_level, string nonce)')
    print('  TPixelTableRowResult get_result_row_for_pixel(TSessionId session, i64 widget_id, TPixel pixel,  table_col_names, bool column_format, i32 pixelRadius, string nonce)')
    print('  TFrontendView get_frontend_view(TSessionId session, string view_name)')
    print('   get_frontend_views(TSessionId session)')
    print('  void create_frontend_view(TSessionId session, string view_name, string view_state, string image_hash, string view_metadata)')
    print('  void delete_frontend_view(TSessionId session, string view_name)')
    print('  TFrontendView get_link_view(TSessionId session, string link)')
    print('  string create_link(TSessionId session, string view_state, string view_metadata)')
    print('  void load_table_binary(TSessionId session, string table_name,  rows)')
    print('  void load_table(TSessionId session, string table_name,  rows)')
    print('  TDetectResult detect_column_types(TSessionId session, string file_name, TCopyParams copy_params)')
    print('  void create_table(TSessionId session, string table_name, TRowDescriptor row_desc, TTableType table_type)')
    print('  void import_table(TSessionId session, string table_name, string file_name, TCopyParams copy_params)')
    print('  void import_geo_table(TSessionId session, string table_name, string file_name, TCopyParams copy_params, TRowDescriptor row_desc)')
    print('  TImportStatus import_table_status(TSessionId session, string import_id)')
    print('  TPendingQuery start_query(TSessionId session, string query_ra, bool just_explain)')
    print('  TStepResult execute_first_step(TPendingQuery pending_query)')
    print('  void broadcast_serialized_rows(string serialized_rows, TRowDescriptor row_desc, TQueryId query_id)')
    print('  TRawPixelDataResult render_vega_raw_pixels(TSessionId session, i64 widget_id, i16 node_idx, string vega_json)')
    print('  void insert_data(TSessionId session, TInsertData insert_data)')
    print('  TTableDescriptor get_table_descriptor(TSessionId session, string table_name)')
    print('  TRowDescriptor get_row_descriptor(TSessionId session, string table_name)')
    print('  TRenderResult render(TSessionId session, string query, string render_type, string nonce)')
    print('  TPixelResult get_rows_for_pixels(TSessionId session, i64 widget_id,  pixels, string table_name,  col_names, bool column_format, string nonce)')
    print('  TPixelRowResult get_row_for_pixel(TSessionId session, i64 widget_id, TPixel pixel, string table_name,  col_names, bool column_format, i32 pixelRadius, string nonce)')
    print('')
    sys.exit(0)

pp = pprint.PrettyPrinter(indent=2)
host = 'localhost'
port = 9090
uri = ''
framed = False
ssl = False
validate = True
ca_certs = None
keyfile = None
certfile = None
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

if sys.argv[argi] == '-novalidate':
    validate = False
    argi += 1

if sys.argv[argi] == '-ca_certs':
    ca_certs = sys.argv[argi+1]
    argi += 2

if sys.argv[argi] == '-keyfile':
    keyfile = sys.argv[argi+1]
    argi += 2

if sys.argv[argi] == '-certfile':
    certfile = sys.argv[argi+1]
    argi += 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close()
