view WebServiceExtensionsV1.1/WebServiceToolWorkflow_REST_SOAP/clients/client_1.py @ 0:049760c677de default tip

Galaxy WSExtensions added successfully
author uga-galaxy-group
date Tue, 05 Jul 2011 19:34:18 -0400
parents
children
line wrap: on
line source

'''
@author  Chaitanya Guttula, Sumedha Ganjoo
@see     LICENSE (MIT style license file).
'''

import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    import sys
    import os
    import urllib
    
    """
    
    This script takes the values of the input parameters of the
    web service from the user and invokes the web service.
    The URL to the WSDL is the command line argument

    """
    servicetype = sys.argv[2]
    if servicetype=='SOAP':
        with warnings.catch_warnings():
            warnings.simplefilter("ignore")
            galaxyhome=os.environ.get('GALAXY_HOME')
            sys.path.append(galaxyhome+'/tools/WebServiceToolWorkflow_REST_SOAP/clientGenerator/')
            os.chdir(galaxyhome+'/tools/WebServiceToolWorkflow_REST_SOAP/clientGenerator/')
            from creatorEngineComplex import *
            from wsdl2path import *
            from paramConverter import *
            from ZSI.writer import SoapWriter
	    from msHandler import *

            webservice = str(sys.argv[3])
            operation = str(sys.argv[4])
            resultfile=open(sys.argv[1],'w')
            length=len(sys.argv)
            inputdict={}
            i=5
            test=ClientCreator()
            while(i>=5 and i<(length-1)):
                key=sys.argv[i]
                print 'key is : ',key
                #if(sys.argv[i+1]=='ZSI.TC.String'):
                val=sys.argv[i+1]
                while(val.find('__at__')>-1):
                    vlist = val.split('__at__')
                    val = '@'.join(vlist)
                while(val.find('__sq__')>-1):
                    vlist = val.split('__sq__')
                    val = ''.join(vlist)
                while(val.find('__gt__')>-1):
                    vlist = val.split('__gt__')
                    val = '>'.join(vlist)
                while(val.find('***')>-1):
                    vlist = val.split('***')
                    val = '\n'.join(vlist)
                while(val.find('**')>-1):
                    vlist = val.split('**')
                    val = ' '.join(vlist)
                #if(val.find(',')>-1):
                #    print 'found ,'
                #    vlist = val.split(',')
                #    val = '\',\''.join(vlist)
                
                
                #if(val.find('__sq__')>-1):
                 #   j=i+4
                  #  val=val.lstrip('__sq__')
                   # while(str(sys.argv[j]).find('__sq__')==-1):
                    #    val=val+' '+sys.argv[j]
                     #   j=j+1
                    #val=val+' '+(str(sys.argv[j]).rstrip('__sq__'))
                    #i=j-3

            #elif((sys.argv[i+1]=='ZSI.TC.Integer')or (sys.argv[i+1]=='ZSI.TCnumbers.Iint')):
             #   val=int(sys.argv[i+1])
            #elif(sys.argv[i+1]=='ZSI.TC.Decimal'):
             #   val=float(sys.argv[i+1])
            #elif(sys.argv[i+2]=='Yes'):
             #   valFile=open(sys.argv[i+3],'r')
              #  val=valFile.read()
            #else:
             #   val=sys.argv[i+1]
                if(val != "0"): 
                    inputdict[key]= val
                #resultfile.write('value is :'+ val+'\n')
            
                i=i+2
            if len(inputdict) == 0:
                inputdic = {}
            else:
                inputdic = flat2nestedDict(inputdict)
            print 'The operation is : ',operation    #added 
            result=test.invokeOp(operation,webservice,inputdic)

	    mshandler = MessageHandler()
            resultDict={}
            resultDict=mshandler.flatten(result)   #mshandler.msParser(responseInstance)
            flat =  nested2flatDict(resultDict)
		
	    result=flat


            #resultfile.write(result)
    
            # Writing the output to the o/p file when the result is parsed
            #keys = result.keys()
        
            #for key in keys:
            #    resultfile.write(str(key)+'\t')
            
            #resultfile.write('\n')
            
            #for key in keys:
            #    if type(result[key])==list:
            #        for i in result[r]:
            #            resultfile.write(str(i)+'\t')
            #            print str(i)
            #    else:
            #        resultfile.write(str(result[key])+'\t')
            for r in result:
                if type(result[r])==list:
                    for i in result[r]:
                        resultfile.write(str(i)+'\n')
                        print str(i)
                else:
                    resultfile.write(str(result[r])+'\n')

            #Writes the result without parsinf in the XML format it gets.
            #sw = SoapWriter(header=False, envelope=False);
            #res = test.opname2outputClassOb(operation,webservice)
            #res_tc = getattr(res,'typecode')
            #ofwhat = res_tc.ofwhat;
            #for tc in ofwhat :
            #    sw.serialize(getattr(result, tc.aname), tc);
            #    doc = sw.dom.getDocument();
            #    fp = open(sys.argv[1], 'w');
            #   try :
            #       doc.writexml(fp, '\t', '', '\n');
            #   finally :
            #       fp.close();
    
    
    elif servicetype == 'REST':
            resUrl = sys.argv[3]
            
            outputFile = open(sys.argv[1],'w')
            if(resUrl.find('__tilda__')>-1):
                ulist = resUrl.split('__tilda__')
                resUrl = '~'.join(ulist)

            paramdict={}
            length=(len(sys.argv))

            print 'in rest',sys.argv
            #print s
            i=4
            print i
            
            while( i>=4 and i<(length-1)):
                    
                key=sys.argv[i]
                val=sys.argv[i+1]
                print 'key : ',key
                print 'value : ',val
                while(val.find('**')>-1):
                    vlist = val.split('**')
                    print '---->',val
                    val = ' '.join(vlist)
            	print 'v : ',val
                paramdict[key]=val
                i=i+2
                
            print paramdict
            
            params = urllib.urlencode(paramdict)
            data = urllib.urlopen(resUrl, params).read()
            outputFile.write(data)

#
#if __name__ == "__main__":
#    main();