view WebServiceExtensionsV1.1/WebServiceToolWorkflow_REST_SOAP/WebServiceTool_input_method_m.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
@see     LICENSE (MIT style license file).
'''

import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    import warnings
    import urllib2
    import platform
    import os,sys
    from clientGenerator.creatorEngineComplex import *
    from clientGenerator.wsdl2path import *
    from clientGenerator.paramConverter import *
    from generateClient import *
    from generateClient1 import *

'''input : wadl/wsdl/sawadl-url, method name
purpose: 
1. Calls methods from generateClient1.py to generate client description for one-time invocation
of the Web service. This client description is added as a xml file under ./clients/
2. Calls methods from generateClient.py to generate client description for invocation of Web service
in a workflow. This client description is added as a xml file under ./workflowclients/
3. Adds the path to the above xml files to Galaxy tool-conf.xml file using call edit_tool_conf.py
'''

servicetype=''

#read the url passed as an argument
url = sys.argv[2]
while(url.find('__tilda__')>-1):
    ulist = url.split('__tilda__')
    url = '~'.join(ulist)

#split url passed on '.' character
urllist = url.split('/')
wsdlname = urllist[len(urllist)-1].split(".")
if len(wsdlname)==1:
    wsdlname =urllist[len(urllist)-1].split('?')

'''#checks the description document (WSDL/WADL) is for SOAP 1.1 or SOAP 2.0 or REST
   If the extesnion is wsdl then servicetype is SOAP else If the extension is wadl then servicetype is REST
   in other conditions(i.e. the file has no extension)
'''
#u = None
#try:
#    u = urllib2.urlopen(url)
#except urllib2.HTTPError, e:
#    print e.code
#    print e.msg
#    print e.headers
#    print e.fp.read()
print 'the url is : ',sys.argv[2]
u = urllib2.urlopen(url)
descfile = open('temp','w')
descfile.write(u.read())
descfile.close()
readwsdl = open('temp','r')
tempstring = 'start'
    
#checks the description document (WSDL/WADL) is for SOAP 1.1 or SOAP 2.0 or REST    
while (tempstring != ''):
    tempstring = readwsdl.readline()
    if tempstring.find('<definitions') != -1 or tempstring.find('<wsdl:definitions') != -1:
       print 'WSDL 1.1 or 1.0'
       servicetype = 'SOAP'
       break
    elif tempstring.find('description') != -1:
         while tempstring != '':
            if tempstring.find('<bindings ') != -1:
                bind = tempstring.split('type')
                bindLength = len(bind)
                bindingtype = bind[bindLength-1]
                print bindingtype
                break
            tempstring = readwsdl.readline()
            if bindingtype.find('http://www.w3.org/ns/wsdl/soap') != -1:    
                servicetype='WSDL2SOAP'
                print 'SOAP'
            else:
                servicetype='WSDL2REST'
            break
    elif tempstring.find('<application') != -1:
        servicetype='REST'
        break
        
readwsdl.close()        
operations = sys.argv[3].split(',')              
    
# The webservice is a soap webservice
if servicetype == 'SOAP':
    
    #Create client tool for using web services in workflow
        for operation in operations:
            if operation != '':
                clientGenerator = ClientGenerator(url,operation,sys.argv[4],'SOAP')#webservice,operation,inputl)
                if clientGenerator.isToolPresent():
                    f = open(sys.argv[4],'a')
                    f.write('The web service workflow tool for service '+url+' and operation '+operation+' was already added to galaxy\n')    
                else:
                    clientGenerator.wsdlClient()
        
    #Create cleint tool for invoking web service stand alone
                clientGenerator1 = ClientGenerator1(url,operation,sys.argv[4],'SOAP')#webservice,operation,inputl)
                if clientGenerator1.isToolPresent():
                    f = open(sys.argv[4],'a')
                    f.write('The web service tool for service '+url+' and operation '+operation+' was already added to galaxy\n')    
                else:
                    clientGenerator1.wsdlClient()
    
    
   
#Web service is a REST Webservice
elif servicetype == 'REST':
    
    javahome = os.environ.get('JAVA_HOME')
    galaxyhome=os.environ.get('GALAXY_HOME')
    classpath= galaxyhome + '/tools/WebServiceToolWorkflow_REST_SOAP/ParserForWADL/bin'
    jarpath = galaxyhome + '/tools/WebServiceToolWorkflow_REST_SOAP/ParserForWADL/lib/'
    machine = platform.machine()
    
    if machine == 'x86_64' :
        print 'a'
        startJVM("%s/jre/lib/amd64/server/libjvm.so" % javahome,"-ea", "-Djava.class.path=%s" % classpath,"-Djava.ext.dirs=%s" % jarpath)
    elif machine == 'i686' :
        startJVM("%s/jre/lib/i386/server/libjvm.so" % javahome,"-ea", "-Djava.class.path=%s" % classpath,"-Djava.ext.dirs=%s" % jarpath)
        print 'b'
    elif machine == 'sun4u' :
        startJVM("%s/jre/lib/sparc/server/libjvm.so" % javahome,"-ea", "-Djava.class.path=%s" % classpath,"-Djava.ext.dirs=%s" % jarpath)
    else :
        print 'c'
        System.exit("Could not identify machine, please specify path to libjvm.so")    
    
    
    
    for operation in operations:
        if(operation != ''):
            clientGenerator = ClientGenerator(url,operation,sys.argv[4],'REST')
            clientGenerator1 = ClientGenerator1(url,operation,sys.argv[4],'REST')
            if clientGenerator.isToolPresent():
                f = open(sys.argv[4],'a')
                f.write('\nThe web service workflow tool for service '+url+' and operation '+operation+' was already added to galaxy\n')    
            else:
                clientGenerator.wadlClient()
            if clientGenerator1.isToolPresent():
                f = open(sys.argv[4],'a')
                f.write('\nThe web service tool for service '+url+' and operation '+operation+' was already added to galaxy\n')    
            else:
                clientGenerator1.wadlClient()
    
    
    #shutdownJVM()