| 26 | 1 #! /usr/bin/python | 
|  | 2 # -*- coding: utf8 -*- | 
|  | 3 | 
|  | 4 """#dyad analysis soap - developed by Jocelyn Brayet <jocelyn.brayet@curie.fr> | 
|  | 5 #Copyright (C) 2015  Institut Curie | 
|  | 6 # | 
|  | 7 #This program is free software: you can redistribute it and/or modify | 
|  | 8 #it under the terms of the GNU General Public License as published by | 
|  | 9 #the Free Software Foundation, either version 3 of the License, or | 
|  | 10 #(at your option) any later version. | 
|  | 11 # | 
|  | 12 #This program is distributed in the hope that it will be useful, | 
|  | 13 #but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 14 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 15 #GNU General Public License for more details. | 
|  | 16 # | 
|  | 17 #You should have received a copy of the GNU General Public License | 
|  | 18 #along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  | 19 # | 
|  | 20 ###########################################################' | 
|  | 21 # | 
|  | 22 #Analysis of spaced dyads in a set of DNA sequences. | 
|  | 23 # | 
|  | 24 ###########################################################' | 
|  | 25 # | 
|  | 26 #usage: dyad-analysis_soap.py [-h] -sequence_file <SEQUENCE_FILE> -length | 
|  | 27 #                             <LENGTH> -organism <ORGANISM> -spacing <SPACING> | 
|  | 28 #                             [-stats <STATS>] [-type <TYPE>] -server <SERVEUR> | 
|  | 29 # | 
|  | 30 #optional arguments: | 
|  | 31 #  -h, --help            show this help message and exit | 
|  | 32 #  -sequence_file <SEQUENCE_FILE>, --sequence_file <SEQUENCE_FILE> | 
|  | 33 #                        Input sequence (FASTA file). | 
|  | 34 #  -length <LENGTH>, --length <LENGTH> | 
|  | 35 #                        Dyad length. | 
|  | 36 #  -organism <ORGANISM>, --organism <ORGANISM> | 
|  | 37 #                        Organism. | 
|  | 38 #  -spacing <SPACING>, --spacing <SPACING> | 
|  | 39 #                        Spacing between elements of the dyads. | 
|  | 40 #  -stats <STATS>, --stats <STATS> | 
|  | 41 #                        List of statistics to return. Supported:occ, mseq, | 
|  | 42 #                        freq, proba, ratio, zscore, like, pos, rank. | 
|  | 43 #  -type <TYPE>, --type <TYPE> | 
|  | 44 #                        Four types are accepted: dr (direct repeats: the | 
|  | 45 #                        second element is the same as the first one); ir | 
|  | 46 #                        (inverted repeats: the second element is the revers | 
|  | 47 #                        complement of the first one); rep (repeats: direct and | 
|  | 48 #                        inverted repeats are evaluated); any | 
|  | 49 #  -server <SERVEUR>, --server <SERVEUR> | 
|  | 50 # | 
|  | 51 #Version 0.1 - 16/04/2015 | 
|  | 52 # | 
|  | 53 ###########################################################'""" | 
|  | 54 __author__ =  'Jocelyn Brayet' | 
|  | 55 dyadAnalysisVersion = '0.1 - 16/04/2015' | 
|  | 56 | 
|  | 57 ###########################################################' | 
|  | 58 ## Import | 
|  | 59 | 
|  | 60 import argparse | 
|  | 61 import os | 
|  | 62 import urllib | 
|  | 63 from suds.client import Client | 
|  | 64 import platform | 
|  | 65 | 
|  | 66 ###########################################################' | 
|  | 67 | 
|  | 68 ################################ functions ############################################################ | 
|  | 69 ## Define a function to make a service perform the desired request using provided arguments | 
|  | 70 def call_run_service(rsat_service, args): | 
|  | 71 	""" | 
|  | 72 	Run job in RSAT server. | 
|  | 73 		service -> RSAT web service | 
|  | 74 		args -> web service request | 
|  | 75 	""" | 
|  | 76 | 
|  | 77 	result = rsat_service.dyad_analysis(args) | 
|  | 78 	return result | 
|  | 79 | 
|  | 80 def testNone(argument): | 
|  | 81 	""" | 
|  | 82 	Test if argument is None or not. | 
|  | 83 		argument -> argument give by user | 
|  | 84 	""" | 
|  | 85 | 
|  | 86 	if not argument is None: | 
|  | 87 		variable = argument[0] | 
|  | 88 	else: | 
|  | 89 		variable = "" | 
|  | 90 	return variable | 
|  | 91 | 
|  | 92 | 
|  | 93 ###########################################################' | 
|  | 94 # server dictionary | 
|  | 95 serverDict = { | 
|  | 96 | 
|  | 97     "fr_ens":"http://rsat01.biologie.ens.fr/rsa-tools/web_services/RSATWS.wsdl", | 
|  | 98     "fr_mrs":"http://rsat-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | 
|  | 99     "fr_ro":"http://rsat.sb-roscoff.fr/web_services/RSATWS.wsdl", | 
|  | 100     "fr_mrs_2":"http://pedagogix-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | 
|  | 101     "es":"http://floresta.eead.csic.es/rsat/web_services/RSATWS.wsdl", | 
|  | 102     "mx":"http://embnet.ccg.unam.mx/rsa-tools/web_services/RSATWS.wsdl" | 
|  | 103 | 
|  | 104     } | 
|  | 105 | 
|  | 106 ###########################################################' | 
|  | 107 | 
|  | 108 if __name__ == '__main__': | 
|  | 109 | 
|  | 110     parser = argparse.ArgumentParser(description='Analysis of spaced dyads in a set of DNA sequences.', epilog='Version '+dyadAnalysisVersion) | 
|  | 111 | 
|  | 112     ########### compare matrices arguments #################### | 
|  | 113 | 
|  | 114     parser.add_argument('-sequence_file', '--sequence_file', metavar='<SEQUENCE_FILE>', type=argparse.FileType('r'), nargs=1, help='Input sequence (FASTA file).', required=True) | 
|  | 115     parser.add_argument('-length', '--length', metavar='<LENGTH>', type=int, nargs=1, help='Dyad length.', required=True) | 
|  | 116     parser.add_argument('-organism', '--organism', metavar='<ORGANISM>', type=str, nargs=1, help='Organism.', required=True) | 
|  | 117     parser.add_argument('-spacing', '--spacing', metavar='<SPACING>', type=int, nargs=1, help='Spacing between elements of the dyads.', required=True) | 
|  | 118     parser.add_argument('-stats', '--stats', metavar='<STATS>', type=str, nargs=1, help='List of statistics to return. Supported:occ, mseq, freq, proba, ratio, zscore, like, pos, rank.', required=False) | 
|  | 119     parser.add_argument('-type', '--type', metavar='<TYPE>', type=str, nargs=1, help='Four types are accepted: dr (direct repeats: the second element is the same as the first one); ir (inverted repeats: the second element is the revers complement of the first one); rep (repeats: direct and inverted repeats are evaluated); any', required=False) | 
|  | 120 | 
|  | 121 | 
|  | 122 | 
|  | 123     ########### galaxy arguments ############################## | 
|  | 124     parser.add_argument('-server', '--server', metavar='<SERVEUR>', type=str, nargs=1, required=True) | 
|  | 125     parser.add_argument('-outGalaxy', '--outGalaxy', metavar='<OUT_GALAXY>', type=str, nargs=1, required=True) | 
|  | 126     ########################################################### | 
|  | 127 | 
|  | 128     args = parser.parse_args() | 
|  | 129 | 
|  | 130     sequence_file = args.sequence_file[0].read() | 
|  | 131     serverValue = testNone(args.server) | 
|  | 132     length = testNone(args.length) | 
|  | 133     organism = testNone(args.organism) | 
|  | 134     spacing = testNone(args.spacing) | 
|  | 135     stats = testNone(args.stats) | 
|  | 136     typeValue = testNone(args.type) | 
|  | 137     outGalaxyValue = testNone(args.outGalaxy) | 
|  | 138 | 
|  | 139 | 
|  | 140     ###########################################################' | 
|  | 141     ## Create the SOAP client to request the RSAT service | 
|  | 142 | 
|  | 143 | 
|  | 144     # Load Client class from suds | 
|  | 145     # Define URL for RSAT services | 
|  | 146     url =  serverDict[serverValue] | 
|  | 147     # Create the client | 
|  | 148     client = Client(url) | 
|  | 149 | 
|  | 150     # Need service interface to perform requests | 
|  | 151     rsat_service = client.service | 
|  | 152 | 
|  | 153     #print client | 
|  | 154 | 
|  | 155     # Define client header | 
|  | 156     userAgent = 'RSAT-Client/v%s (%s; Python %s; %s)' % ( | 
|  | 157         dyadAnalysisVersion, | 
|  | 158         os.path.basename( __file__ ), | 
|  | 159         platform.python_version(), | 
|  | 160         platform.system() | 
|  | 161     ) | 
|  | 162 | 
|  | 163     httpHeaders = {'User-agent': userAgent} | 
|  | 164     client.set_options(headers=httpHeaders) | 
|  | 165     client.set_options(timeout=300) | 
|  | 166 | 
|  | 167 | 
|  | 168     dyadAnalysisRequest = { | 
|  | 169 | 
|  | 170        	'output' : 'both', | 
|  | 171 	'format' : 'fasta', | 
|  | 172 	'sequence' : sequence_file, | 
|  | 173 	'length' : length, | 
|  | 174 	'organism' : organism, | 
|  | 175 	'spacing' : spacing, | 
|  | 176 	'stats' : stats, | 
|  | 177 	'type' : typeValue | 
|  | 178 | 
|  | 179     } | 
|  | 180 | 
|  | 181 | 
|  | 182     result = call_run_service(rsat_service, dyadAnalysisRequest) | 
|  | 183 | 
|  | 184 | 
|  | 185     print url | 
|  | 186 | 
|  | 187     print "###############################################" | 
|  | 188     print "Command performed on server" | 
|  | 189     print result.command | 
|  | 190     print "###############################################" | 
|  | 191     print "Result" | 
|  | 192     print result.server | 
|  | 193 | 
|  | 194     nameFile = "dyad_analysis_results.txt" | 
|  | 195 | 
|  | 196     urlResult=result.server.replace("$RSAT/public_html/",url.replace("web_services/RSATWS.wsdl","")) | 
|  | 197 | 
|  | 198     print urlResult | 
|  | 199 | 
|  | 200     urllib.urlretrieve(urlResult, nameFile) | 
|  | 201 | 
|  | 202 | 
|  | 203     os.popen("cp "+nameFile+" "+outGalaxyValue) | 
|  | 204 | 
|  | 205 | 
|  | 206 | 
|  | 207 | 
|  | 208 | 
|  | 209 |