#!/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 apache.airavata.api import Airavata
from apache.airavata.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('  string getAPIVersion(AuthzToken authzToken)')
    print('  bool isUserExists(AuthzToken authzToken, string gatewayId, string userName)')
    print('  string addGateway(AuthzToken authzToken, Gateway gateway)')
    print('   getAllUsersInGateway(AuthzToken authzToken, string gatewayId)')
    print('  bool updateGateway(AuthzToken authzToken, string gatewayId, Gateway updatedGateway)')
    print('  Gateway getGateway(AuthzToken authzToken, string gatewayId)')
    print('  bool deleteGateway(AuthzToken authzToken, string gatewayId)')
    print('   getAllGateways(AuthzToken authzToken)')
    print('  bool isGatewayExist(AuthzToken authzToken, string gatewayId)')
    print('  string createNotification(AuthzToken authzToken, Notification notification)')
    print('  bool updateNotification(AuthzToken authzToken, Notification notification)')
    print('  bool deleteNotification(AuthzToken authzToken, string gatewayId, string notificationId)')
    print('  Notification getNotification(AuthzToken authzToken, string gatewayId, string notificationId)')
    print('   getAllNotifications(AuthzToken authzToken, string gatewayId)')
    print('  string generateAndRegisterSSHKeys(AuthzToken authzToken, string gatewayId, string userName, string description, CredentialOwnerType credentialOwnerType)')
    print('  string registerPwdCredential(AuthzToken authzToken, string gatewayId, string portalUserName, string loginUserName, string password, string description)')
    print('  string getSSHPubKey(AuthzToken authzToken, string airavataCredStoreToken, string gatewayId)')
    print('   getAllGatewaySSHPubKeys(AuthzToken authzToken, string gatewayId)')
    print('   getAllCredentialSummaryForGateway(AuthzToken authzToken, SummaryType type, string gatewayId)')
    print('   getAllCredentialSummaryForUsersInGateway(AuthzToken authzToken, SummaryType type, string gatewayId, string userId)')
    print('   getAllGatewayPWDCredentials(AuthzToken authzToken, string gatewayId)')
    print('  bool deleteSSHPubKey(AuthzToken authzToken, string airavataCredStoreToken, string gatewayId)')
    print('  bool deletePWDCredential(AuthzToken authzToken, string airavataCredStoreToken, string gatewayId)')
    print('  string createProject(AuthzToken authzToken, string gatewayId, Project project)')
    print('  void updateProject(AuthzToken authzToken, string projectId, Project updatedProject)')
    print('  Project getProject(AuthzToken authzToken, string projectId)')
    print('  bool deleteProject(AuthzToken authzToken, string projectId)')
    print('   getUserProjects(AuthzToken authzToken, string gatewayId, string userName, i32 limit, i32 offset)')
    print('   searchProjects(AuthzToken authzToken, string gatewayId, string userName,  filters, i32 limit, i32 offset)')
    print('   searchExperiments(AuthzToken authzToken, string gatewayId, string userName,  filters, i32 limit, i32 offset)')
    print('  ExperimentStatistics getExperimentStatistics(AuthzToken authzToken, string gatewayId, i64 fromTime, i64 toTime, string userName, string applicationName, string resourceHostName)')
    print('   getExperimentsInProject(AuthzToken authzToken, string projectId, i32 limit, i32 offset)')
    print('   getUserExperiments(AuthzToken authzToken, string gatewayId, string userName, i32 limit, i32 offset)')
    print('  string createExperiment(AuthzToken authzToken, string gatewayId, ExperimentModel experiment)')
    print('  bool deleteExperiment(AuthzToken authzToken, string experimentId)')
    print('  ExperimentModel getExperiment(AuthzToken authzToken, string airavataExperimentId)')
    print('  ExperimentModel getExperimentByAdmin(AuthzToken authzToken, string airavataExperimentId)')
    print('  ExperimentModel getDetailedExperimentTree(AuthzToken authzToken, string airavataExperimentId)')
    print('  void updateExperiment(AuthzToken authzToken, string airavataExperimentId, ExperimentModel experiment)')
    print('  void updateExperimentConfiguration(AuthzToken authzToken, string airavataExperimentId, UserConfigurationDataModel userConfiguration)')
    print('  void updateResourceScheduleing(AuthzToken authzToken, string airavataExperimentId, ComputationalResourceSchedulingModel resourceScheduling)')
    print('  bool validateExperiment(AuthzToken authzToken, string airavataExperimentId)')
    print('  void launchExperiment(AuthzToken authzToken, string airavataExperimentId, string gatewayId)')
    print('  ExperimentStatus getExperimentStatus(AuthzToken authzToken, string airavataExperimentId)')
    print('   getExperimentOutputs(AuthzToken authzToken, string airavataExperimentId)')
    print('   getIntermediateOutputs(AuthzToken authzToken, string airavataExperimentId)')
    print('   getJobStatuses(AuthzToken authzToken, string airavataExperimentId)')
    print('   getJobDetails(AuthzToken authzToken, string airavataExperimentId)')
    print('  string cloneExperiment(AuthzToken authzToken, string existingExperimentID, string newExperimentName, string newExperimentProjectId)')
    print('  string cloneExperimentByAdmin(AuthzToken authzToken, string existingExperimentID, string newExperimentName, string newExperimentProjectId)')
    print('  void terminateExperiment(AuthzToken authzToken, string airavataExperimentId, string gatewayId)')
    print('  string registerApplicationModule(AuthzToken authzToken, string gatewayId, ApplicationModule applicationModule)')
    print('  ApplicationModule getApplicationModule(AuthzToken authzToken, string appModuleId)')
    print('  bool updateApplicationModule(AuthzToken authzToken, string appModuleId, ApplicationModule applicationModule)')
    print('   getAllAppModules(AuthzToken authzToken, string gatewayId)')
    print('  bool deleteApplicationModule(AuthzToken authzToken, string appModuleId)')
    print('  string registerApplicationDeployment(AuthzToken authzToken, string gatewayId, ApplicationDeploymentDescription applicationDeployment)')
    print('  ApplicationDeploymentDescription getApplicationDeployment(AuthzToken authzToken, string appDeploymentId)')
    print('  bool updateApplicationDeployment(AuthzToken authzToken, string appDeploymentId, ApplicationDeploymentDescription applicationDeployment)')
    print('  bool deleteApplicationDeployment(AuthzToken authzToken, string appDeploymentId)')
    print('   getAllApplicationDeployments(AuthzToken authzToken, string gatewayId)')
    print('   getAppModuleDeployedResources(AuthzToken authzToken, string appModuleId)')
    print('  string registerApplicationInterface(AuthzToken authzToken, string gatewayId, ApplicationInterfaceDescription applicationInterface)')
    print('  string cloneApplicationInterface(AuthzToken authzToken, string existingAppInterfaceID, string newApplicationName, string gatewayId)')
    print('  ApplicationInterfaceDescription getApplicationInterface(AuthzToken authzToken, string appInterfaceId)')
    print('  bool updateApplicationInterface(AuthzToken authzToken, string appInterfaceId, ApplicationInterfaceDescription applicationInterface)')
    print('  bool deleteApplicationInterface(AuthzToken authzToken, string appInterfaceId)')
    print('   getAllApplicationInterfaceNames(AuthzToken authzToken, string gatewayId)')
    print('   getAllApplicationInterfaces(AuthzToken authzToken, string gatewayId)')
    print('   getApplicationInputs(AuthzToken authzToken, string appInterfaceId)')
    print('   getApplicationOutputs(AuthzToken authzToken, string appInterfaceId)')
    print('   getAvailableAppInterfaceComputeResources(AuthzToken authzToken, string appInterfaceId)')
    print('  string registerComputeResource(AuthzToken authzToken, ComputeResourceDescription computeResourceDescription)')
    print('  ComputeResourceDescription getComputeResource(AuthzToken authzToken, string computeResourceId)')
    print('   getAllComputeResourceNames(AuthzToken authzToken)')
    print('  bool updateComputeResource(AuthzToken authzToken, string computeResourceId, ComputeResourceDescription computeResourceDescription)')
    print('  bool deleteComputeResource(AuthzToken authzToken, string computeResourceId)')
    print('  string registerStorageResource(AuthzToken authzToken, StorageResourceDescription storageResourceDescription)')
    print('  StorageResourceDescription getStorageResource(AuthzToken authzToken, string storageResourceId)')
    print('   getAllStorageResourceNames(AuthzToken authzToken)')
    print('  bool updateStorageResource(AuthzToken authzToken, string storageResourceId, StorageResourceDescription storageResourceDescription)')
    print('  bool deleteStorageResource(AuthzToken authzToken, string storageResourceId)')
    print('  string addLocalSubmissionDetails(AuthzToken authzToken, string computeResourceId, i32 priorityOrder, LOCALSubmission localSubmission)')
    print('  bool updateLocalSubmissionDetails(AuthzToken authzToken, string jobSubmissionInterfaceId, LOCALSubmission localSubmission)')
    print('  LOCALSubmission getLocalJobSubmission(AuthzToken authzToken, string jobSubmissionId)')
    print('  string addSSHJobSubmissionDetails(AuthzToken authzToken, string computeResourceId, i32 priorityOrder, SSHJobSubmission sshJobSubmission)')
    print('  string addSSHForkJobSubmissionDetails(AuthzToken authzToken, string computeResourceId, i32 priorityOrder, SSHJobSubmission sshJobSubmission)')
    print('  SSHJobSubmission getSSHJobSubmission(AuthzToken authzToken, string jobSubmissionId)')
    print('  string addUNICOREJobSubmissionDetails(AuthzToken authzToken, string computeResourceId, i32 priorityOrder, UnicoreJobSubmission unicoreJobSubmission)')
    print('  UnicoreJobSubmission getUnicoreJobSubmission(AuthzToken authzToken, string jobSubmissionId)')
    print('  string addCloudJobSubmissionDetails(AuthzToken authzToken, string computeResourceId, i32 priorityOrder, CloudJobSubmission cloudSubmission)')
    print('  CloudJobSubmission getCloudJobSubmission(AuthzToken authzToken, string jobSubmissionId)')
    print('  bool updateSSHJobSubmissionDetails(AuthzToken authzToken, string jobSubmissionInterfaceId, SSHJobSubmission sshJobSubmission)')
    print('  bool updateCloudJobSubmissionDetails(AuthzToken authzToken, string jobSubmissionInterfaceId, CloudJobSubmission sshJobSubmission)')
    print('  bool updateUnicoreJobSubmissionDetails(AuthzToken authzToken, string jobSubmissionInterfaceId, UnicoreJobSubmission unicoreJobSubmission)')
    print('  string addLocalDataMovementDetails(AuthzToken authzToken, string productUri, DMType dataMoveType, i32 priorityOrder, LOCALDataMovement localDataMovement)')
    print('  bool updateLocalDataMovementDetails(AuthzToken authzToken, string dataMovementInterfaceId, LOCALDataMovement localDataMovement)')
    print('  LOCALDataMovement getLocalDataMovement(AuthzToken authzToken, string dataMovementId)')
    print('  string addSCPDataMovementDetails(AuthzToken authzToken, string productUri, DMType dataMoveType, i32 priorityOrder, SCPDataMovement scpDataMovement)')
    print('  bool updateSCPDataMovementDetails(AuthzToken authzToken, string dataMovementInterfaceId, SCPDataMovement scpDataMovement)')
    print('  SCPDataMovement getSCPDataMovement(AuthzToken authzToken, string dataMovementId)')
    print('  string addUnicoreDataMovementDetails(AuthzToken authzToken, string productUri, DMType dataMoveType, i32 priorityOrder, UnicoreDataMovement unicoreDataMovement)')
    print('  bool updateUnicoreDataMovementDetails(AuthzToken authzToken, string dataMovementInterfaceId, UnicoreDataMovement unicoreDataMovement)')
    print('  UnicoreDataMovement getUnicoreDataMovement(AuthzToken authzToken, string dataMovementId)')
    print('  string addGridFTPDataMovementDetails(AuthzToken authzToken, string productUri, DMType dataMoveType, i32 priorityOrder, GridFTPDataMovement gridFTPDataMovement)')
    print('  bool updateGridFTPDataMovementDetails(AuthzToken authzToken, string dataMovementInterfaceId, GridFTPDataMovement gridFTPDataMovement)')
    print('  GridFTPDataMovement getGridFTPDataMovement(AuthzToken authzToken, string dataMovementId)')
    print('  bool changeJobSubmissionPriority(AuthzToken authzToken, string jobSubmissionInterfaceId, i32 newPriorityOrder)')
    print('  bool changeDataMovementPriority(AuthzToken authzToken, string dataMovementInterfaceId, i32 newPriorityOrder)')
    print('  bool changeJobSubmissionPriorities(AuthzToken authzToken,  jobSubmissionPriorityMap)')
    print('  bool changeDataMovementPriorities(AuthzToken authzToken,  dataMovementPriorityMap)')
    print('  bool deleteJobSubmissionInterface(AuthzToken authzToken, string computeResourceId, string jobSubmissionInterfaceId)')
    print('  bool deleteDataMovementInterface(AuthzToken authzToken, string productUri, string dataMovementInterfaceId, DMType dataMoveType)')
    print('  string registerResourceJobManager(AuthzToken authzToken, ResourceJobManager resourceJobManager)')
    print('  bool updateResourceJobManager(AuthzToken authzToken, string resourceJobManagerId, ResourceJobManager updatedResourceJobManager)')
    print('  ResourceJobManager getResourceJobManager(AuthzToken authzToken, string resourceJobManagerId)')
    print('  bool deleteResourceJobManager(AuthzToken authzToken, string resourceJobManagerId)')
    print('  bool deleteBatchQueue(AuthzToken authzToken, string computeResourceId, string queueName)')
    print('  string registerGatewayResourceProfile(AuthzToken authzToken, GatewayResourceProfile gatewayResourceProfile)')
    print('  GatewayResourceProfile getGatewayResourceProfile(AuthzToken authzToken, string gatewayID)')
    print('  bool updateGatewayResourceProfile(AuthzToken authzToken, string gatewayID, GatewayResourceProfile gatewayResourceProfile)')
    print('  bool deleteGatewayResourceProfile(AuthzToken authzToken, string gatewayID)')
    print('  bool addGatewayComputeResourcePreference(AuthzToken authzToken, string gatewayID, string computeResourceId, ComputeResourcePreference computeResourcePreference)')
    print('  bool addGatewayStoragePreference(AuthzToken authzToken, string gatewayID, string storageResourceId, StoragePreference storagePreference)')
    print('  ComputeResourcePreference getGatewayComputeResourcePreference(AuthzToken authzToken, string gatewayID, string computeResourceId)')
    print('  StoragePreference getGatewayStoragePreference(AuthzToken authzToken, string gatewayID, string storageResourceId)')
    print('   getAllGatewayComputeResourcePreferences(AuthzToken authzToken, string gatewayID)')
    print('   getAllGatewayStoragePreferences(AuthzToken authzToken, string gatewayID)')
    print('   getAllGatewayResourceProfiles(AuthzToken authzToken)')
    print('  bool updateGatewayComputeResourcePreference(AuthzToken authzToken, string gatewayID, string computeResourceId, ComputeResourcePreference computeResourcePreference)')
    print('  bool updateGatewayStoragePreference(AuthzToken authzToken, string gatewayID, string storageId, StoragePreference storagePreference)')
    print('  bool deleteGatewayComputeResourcePreference(AuthzToken authzToken, string gatewayID, string computeResourceId)')
    print('  bool deleteGatewayStoragePreference(AuthzToken authzToken, string gatewayID, string storageId)')
    print('  string registerUserResourceProfile(AuthzToken authzToken, UserResourceProfile userResourceProfile)')
    print('  UserResourceProfile getUserResourceProfile(AuthzToken authzToken, string userId, string gatewayID)')
    print('  bool updateUserResourceProfile(AuthzToken authzToken, string userId, string gatewayID, UserResourceProfile userResourceProfile)')
    print('  bool deleteUserResourceProfile(AuthzToken authzToken, string userId, string gatewayID)')
    print('  bool addUserComputeResourcePreference(AuthzToken authzToken, string userId, string gatewayID, string userComputeResourceId, UserComputeResourcePreference userComputeResourcePreference)')
    print('  bool addUserStoragePreference(AuthzToken authzToken, string userId, string gatewayID, string userStorageResourceId, UserStoragePreference userStoragePreference)')
    print('  UserComputeResourcePreference getUserComputeResourcePreference(AuthzToken authzToken, string userId, string gatewayID, string userComputeResourceId)')
    print('  UserStoragePreference getUserStoragePreference(AuthzToken authzToken, string userId, string gatewayID, string userStorageResourceId)')
    print('   getAllUserComputeResourcePreferences(AuthzToken authzToken, string userId, string gatewayID)')
    print('   getAllUserStoragePreferences(AuthzToken authzToken, string userId, string gatewayID)')
    print('   getAllUserResourceProfiles(AuthzToken authzToken)')
    print('  bool updateUserComputeResourcePreference(AuthzToken authzToken, string userId, string gatewayID, string userComputeResourceId, UserComputeResourcePreference userComputeResourcePreference)')
    print('  bool updateUserStoragePreference(AuthzToken authzToken, string userId, string gatewayID, string userStorageId, UserStoragePreference userStoragePreference)')
    print('  bool deleteUserComputeResourcePreference(AuthzToken authzToken, string userId, string gatewayID, string userComputeResourceId)')
    print('  bool deleteUserStoragePreference(AuthzToken authzToken, string userId, string gatewayID, string userStorageId)')
    print('   getAllWorkflows(AuthzToken authzToken, string gatewayId)')
    print('   getLatestQueueStatuses(AuthzToken authzToken)')
    print('  WorkflowModel getWorkflow(AuthzToken authzToken, string workflowTemplateId)')
    print('  void deleteWorkflow(AuthzToken authzToken, string workflowTemplateId)')
    print('  string registerWorkflow(AuthzToken authzToken, string gatewayId, WorkflowModel workflow)')
    print('  void updateWorkflow(AuthzToken authzToken, string workflowTemplateId, WorkflowModel workflow)')
    print('  string getWorkflowTemplateId(AuthzToken authzToken, string workflowName)')
    print('  bool isWorkflowExistWithName(AuthzToken authzToken, string workflowName)')
    print('  string registerDataProduct(AuthzToken authzToken, DataProductModel dataProductModel)')
    print('  DataProductModel getDataProduct(AuthzToken authzToken, string dataProductUri)')
    print('  string registerReplicaLocation(AuthzToken authzToken, DataReplicaLocationModel replicaLocationModel)')
    print('  DataProductModel getParentDataProduct(AuthzToken authzToken, string productUri)')
    print('   getChildDataProducts(AuthzToken authzToken, string productUri)')
    print('  bool shareResourceWithUsers(AuthzToken authzToken, string resourceId, ResourceType resourceType,  userPermissionList)')
    print('  bool revokeSharingOfResourceFromUsers(AuthzToken authzToken, string resourceId, ResourceType resourceType,  userPermissionList)')
    print('   getAllAccessibleUsers(AuthzToken authzToken, string resourceId, ResourceType resourceType, ResourcePermissionType permissionType)')
    print('  bool createGroup(AuthzToken authzToken, GroupModel groupModel)')
    print('  bool updateGroup(AuthzToken authzToken, GroupModel groupModel)')
    print('  bool deleteGroup(AuthzToken authzToken, string groupId, string ownerId, string gatewayId)')
    print('  GroupModel getGroup(AuthzToken authzToken, string groupId)')
    print('   getAllGroupsUserBelongs(AuthzToken authzToken, string userName, string gatewayId)')
    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 = Airavata.Client(protocol)
transport.open()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

transport.close()
