#!/usr/bin/env python
#
# Autogenerated by Thrift Compiler (0.13.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 api import Hawk
from api.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('  void createInstance(string name, string backend, i32 minimumDelayMillis, i32 maximumDelayMillis,  enabledPlugins, string indexFactory)')
    print('   listBackends()')
    print('   listPlugins()')
    print('   listPluginDetails()')
    print('   listInstances()')
    print('  void removeInstance(string name)')
    print('  void startInstance(string name)')
    print('  void stopInstance(string name)')
    print('  void syncInstance(string name, bool blockUntilDone)')
    print('  void registerMetamodels(string name,  metamodel)')
    print('  void unregisterMetamodels(string name,  metamodel)')
    print('   listMetamodels(string name)')
    print('   listTypeNames(string hawkInstanceName, string metamodelURI)')
    print('   listAttributeNames(string hawkInstanceName, string metamodelURI, string typeName)')
    print('   listMetamodelParsers(string name)')
    print('   listQueryLanguages(string name)')
    print('  QueryResult query(string name, string query, string language, HawkQueryOptions options)')
    print('  QueryReport timedQuery(string name, string query, string language, HawkQueryOptions options)')
    print('   resolveProxies(string name,  ids, HawkQueryOptions options)')
    print('  string asyncQuery(string name, string query, string language, HawkQueryOptions options)')
    print('  void cancelAsyncQuery(string queryID)')
    print('  QueryReport fetchAsyncQueryResults(string queryID)')
    print('  void addRepository(string name, Repository repo, Credentials credentials)')
    print('  bool isFrozen(string name, string uri)')
    print('  void setFrozen(string name, string uri, bool isFrozen)')
    print('  void removeRepository(string name, string uri)')
    print('  void updateRepositoryCredentials(string name, string uri, Credentials cred)')
    print('   listRepositories(string name)')
    print('   listRepositoryTypes()')
    print('   listFiles(string name,  repository,  filePatterns)')
    print('  void configurePolling(string name, i32 base, i32 max)')
    print('  void addDerivedAttribute(string name, DerivedAttributeSpec spec)')
    print('  void removeDerivedAttribute(string name, DerivedAttributeSpec spec)')
    print('   listDerivedAttributes(string name)')
    print('  void addIndexedAttribute(string name, IndexedAttributeSpec spec)')
    print('  void removeIndexedAttribute(string name, IndexedAttributeSpec spec)')
    print('   listIndexedAttributes(string name)')
    print('   getModel(string name, HawkQueryOptions options)')
    print('   getRootElements(string name, HawkQueryOptions options)')
    print('  Subscription watchStateChanges(string name)')
    print('  Subscription watchModelChanges(string name, string repositoryUri,  filePath, string clientID, SubscriptionDurability durableEvents)')
    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 = Hawk.Client(protocol)
transport.open()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close()
