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

import pprint
import sys

if sys.version_info[0] > 2:
    from urllib.parse import urlparse
else:
    from urlparse import urlparse

from thrift.protocol.TBinaryProtocol import TBinaryProtocol
from thrift.transport import THttpClient, TSocket, TSSLSocket, TTransport

from iotdb.thrift.ainode import IAINodeRPCService
from iotdb.thrift.ainode.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('  TSStatus stopAINode()')
    print('  TShowModelsResp showModels(TShowModelsReq req)')
    print('  TShowLoadedModelsResp showLoadedModels(TShowLoadedModelsReq req)')
    print('  TShowAIDevicesResp showAIDevices()')
    print('  TSStatus deleteModel(TDeleteModelReq req)')
    print('  TRegisterModelResp registerModel(TRegisterModelReq req)')
    print('  TAIHeartbeatResp getAIHeartbeat(TAIHeartbeatReq req)')
    print('  TSStatus createTrainingTask(TTrainingReq req)')
    print('  TSStatus loadModel(TLoadModelReq req)')
    print('  TSStatus unloadModel(TUnloadModelReq req)')
    print('  TInferenceResp inference(TInferenceReq req)')
    print('  TForecastResp forecast(TForecastReq req)')
    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 = IAINodeRPCService.Client(protocol)
transport.open()

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close()
