| 2 | 1 #! /usr/bin/python | 
|  | 2 # -*- coding: utf8 -*- | 
|  | 3 """#Peak Motifs - developed by Jocelyn Brayet <jocelyn.brayet@curie.fr> | 
|  | 4 #Copyright (C) 2015  Institut Curie | 
|  | 5 # | 
|  | 6 #This program is free software: you can redistribute it and/or modify | 
|  | 7 #it under the terms of the GNU General Public License as published by | 
|  | 8 #the Free Software Foundation, either version 3 of the License, or | 
|  | 9 #(at your option) any later version. | 
|  | 10 # | 
|  | 11 #This program is distributed in the hope that it will be useful, | 
|  | 12 #but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 13 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 14 #GNU General Public License for more details. | 
|  | 15 # | 
|  | 16 #You should have received a copy of the GNU General Public License | 
|  | 17 #along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
|  | 18 # | 
|  | 19 ###########################################################' | 
|  | 20 # | 
|  | 21 #Client to download peak-motifs results from RSAT server. | 
|  | 22 # | 
|  | 23 # | 
|  | 24 #usage: peak-motifs_soap.py [-h] -test <TEST_FILE> [-control <CONTROL_FILE>] | 
|  | 25 #				[-max_seq_length <MAX_SEQ_LENGTH>] | 
|  | 26 #				[-max_motif_number <MAX_MOTIF_NUMBER>] | 
|  | 27 #				[-top_peaks <TOP_PEAKS>] [-min_length <MIN_LENGTH>] | 
|  | 28 #				[-max_length <MAX_LENGTH>] [-markov <MARKOV_MODEL>] | 
|  | 29 #				[-min_markov <MIN_MARKOV>] | 
|  | 30 #				[-max_markov <MAX_MARKOV>] [-noov <NOOV_DETECTION>] | 
|  | 31 #				[-class_int <CLASS_INT>] [-str <STR_SUMMED>] | 
|  | 32 #				[-graph_title <GRAPH_TITLE>] | 
|  | 33 #				[-image_format <IMAGE_FORMAT>] | 
|  | 34 #				[-disco [<DISCO_ALGORITHM> [<DISCO_ALGORITHM> ...]]] | 
|  | 35 #				[-source <SOURCE_FILE>] [-verb <VERBOSITY>] | 
|  | 36 #				[-ref_motif <REF_MOTIF>] -server <SERVEUR> | 
|  | 37 # | 
|  | 38 #optional arguments: | 
|  | 39 #  -h, --help		show this help message and exit | 
|  | 40 #  -test <TEST_FILE>, --test_file <TEST_FILE> | 
|  | 41 #			Input test peak sequence in fasta format. | 
|  | 42 #  -control <CONTROL_FILE>, --control_file <CONTROL_FILE> | 
|  | 43 #			Input control peak sequence in fasta format. | 
|  | 44 #  -max_seq_length <MAX_SEQ_LENGTH>, --maxSeqLength <MAX_SEQ_LENGTH> | 
|  | 45 #			Maximal sequence length. | 
|  | 46 #  -max_motif_number <MAX_MOTIF_NUMBER>, --maxMotifNumber <MAX_MOTIF_NUMBER> | 
|  | 47 #			Maximal number of motifs (matrices) to return for | 
|  | 48 #			pattern discovery algorithms. | 
|  | 49 #  -top_peaks <TOP_PEAKS>, --topPeaks <TOP_PEAKS> | 
|  | 50 #			Restrict the analysis to the N peaks at the top of the | 
|  | 51 #			input sequence file. | 
|  | 52 #  -min_length <MIN_LENGTH>, --minLength <MIN_LENGTH> | 
|  | 53 #			Minimal oligonucleotide length. | 
|  | 54 #  -max_length <MAX_LENGTH>, --maxLength <MAX_LENGTH> | 
|  | 55 #			Maximal oligonucleotide length. | 
|  | 56 #  -markov <MARKOV_MODEL>, --markovModel <MARKOV_MODEL> | 
|  | 57 #			Order of the Markov model used to estimatd expected | 
|  | 58 #			oligonucleotide frequencies for oligo-analysis and | 
|  | 59 #			local-word-analysis. | 
|  | 60 #  -min_markov <MIN_MARKOV>, --minMarkov <MIN_MARKOV> | 
|  | 61 #			Minimal value for markov order. Use in combination | 
|  | 62 #			with the next option (max_markov). | 
|  | 63 #  -max_markov <MAX_MARKOV>, --maxMarkov <MAX_MARKOV> | 
|  | 64 #			Maximal value for markov order. Use in combination | 
|  | 65 #			with the previous option (min_markov). | 
|  | 66 #  -noov <NOOV_DETECTION>, --noovDetection <NOOV_DETECTION> | 
|  | 67 #			No overlapping of oligos allowed if value = 1. | 
|  | 68 #  -class_int <CLASS_INT>, --classInt <CLASS_INT> | 
|  | 69 #			Class interval for position-analysis. The width of the | 
|  | 70 #			position classes, in number of bases (default: 20). | 
|  | 71 #  -str <STR_SUMMED>, --strSummed <STR_SUMMED> | 
|  | 72 #			Oligonucleotide occurrences found on both stands are | 
|  | 73 #			summed (2) or not (1). Default is 2. | 
|  | 74 #  -graph_title <GRAPH_TITLE>, --graphTitle <GRAPH_TITLE> | 
|  | 75 #			Title displayed on top of the graphs. | 
|  | 76 #  -image_format <IMAGE_FORMAT>, --imageFormat <IMAGE_FORMAT> | 
|  | 77 #			Image format. All the formats supported by XYgraph can | 
|  | 78 #			be used. | 
|  | 79 #  -disco [<DISCO_ALGORITHM> [<DISCO_ALGORITHM> ...]], --discoAlgorithm [<DISCO_ALGORITHM> [<DISCO_ALGORITHM> ...]] | 
|  | 80 #			Specify the software tool(s) that will be used for | 
|  | 81 #			motif discovery | 
|  | 82 #			(oligos|dyads|positions|local_words|merged_words). | 
|  | 83 #			Several algorithms can be specified either by using a | 
|  | 84 #			comma-separated list of algorithms: -disco | 
|  | 85 #			oligos,dyads | 
|  | 86 #  -source <SOURCE_FILE>, --sourceFile <SOURCE_FILE> | 
|  | 87 #			Enter the source of the fasta sequence file. Supported | 
|  | 88 #			source: galaxy | 
|  | 89 #  -verb <VERBOSITY>, --verbosity <VERBOSITY> | 
|  | 90 #			Verbosity. | 
|  | 91 #  -ref_motif <REF_MOTIF>, --ref_motif <REF_MOTIF> | 
|  | 92 #			Motif annotated in some transcription factor database | 
|  | 93 #			(e.g. RegulonDB, Jaspar, TRANSFAC) for the | 
|  | 94 #			transcription factor of interest. | 
|  | 95 #  -server <SERVEUR>, --server <SERVEUR> | 
|  | 96 #			RSAT server | 
|  | 97 #  -outGalaxy <OUT_GALAXY>, --outGalaxy <OUT_GALAXY> | 
|  | 98 # | 
|  | 99 #Version 0.1 - 30/01/2015 - Adapted from Jocelyn Brayet, France Genomique team | 
|  | 100 # | 
|  | 101 ###########################################################""" | 
|  | 102 __author__ =  'Jocelyn Brayet' | 
|  | 103 | 
|  | 104 ###########################################################' | 
|  | 105 ## Import | 
|  | 106 | 
|  | 107 import argparse | 
|  | 108 import os | 
|  | 109 import urllib | 
|  | 110 import zipfile | 
|  | 111 import time | 
|  | 112 import platform | 
|  | 113 from suds.client import Client | 
|  | 114 | 
|  | 115 ###########################################################' | 
|  | 116 | 
|  | 117 ###########################################################' | 
|  | 118 ## Define log options for suds | 
|  | 119 | 
|  | 120 # Import log package | 
|  | 121 #import logging | 
|  | 122 | 
|  | 123 # Import log package | 
|  | 124 #import logging | 
|  | 125 # création de l'objet logger qui va nous servir à écrire dans les logs | 
|  | 126 #logger = logging.getLogger() | 
|  | 127 # on met le niveau du logger à DEBUG, comme ça il écrit tout | 
|  | 128 #logger.setLevel(logging.DEBUG) | 
|  | 129 # Configure log of suds clients to DEBUG for verbose output concerning Client request | 
|  | 130 #logging.getLogger('suds.client').setLevel(logging.ERROR) | 
|  | 131 #logging.getLogger('suds.transport').setLevel(logging.ERROR) | 
|  | 132 #logging.getLogger('suds.xsd.schema').setLevel(logging.ERROR) | 
|  | 133 #logging.getLogger('suds.wsdl').setLevel(logging.ERROR) | 
|  | 134 | 
|  | 135 | 
|  | 136 # création d'un second handler qui va rediriger chaque écriture de log | 
|  | 137 # sur la console | 
|  | 138 #steam_handler = logging.StreamHandler() | 
|  | 139 #steam_handler.setLevel(logging.DEBUG) | 
|  | 140 #logger.addHandler(steam_handler) | 
|  | 141 | 
|  | 142 #logger.info('Hello') | 
|  | 143 | 
|  | 144 #print(client.factory.create('peak_motifs')) | 
|  | 145 | 
|  | 146 #	  (PeakMotifsRequest){ | 
|  | 147 #		 output = None -> ok | 
|  | 148 #		 verbosity = None | 
|  | 149 #		 test = None -> ok | 
|  | 150 #		 tmp_test_infile = None | 
|  | 151 #		 control = None | 
|  | 152 #		 tmp_control_infile = None | 
|  | 153 #		 max_seq_length = None | 
|  | 154 #		 max_motif_number = None | 
|  | 155 #		 ref_motif = None | 
|  | 156 #		 top_peaks = None | 
|  | 157 #		 min_length = None | 
|  | 158 #		 max_length = None | 
|  | 159 #		 markov = None | 
|  | 160 #		 min_markov = None | 
|  | 161 #		 max_markov = None | 
|  | 162 #		 noov = None | 
|  | 163 #		 class_int = None | 
|  | 164 #		 str = None | 
|  | 165 #		 graph_title = None | 
|  | 166 #		 image_format = None | 
|  | 167 #		 disco = None | 
|  | 168 #		 source = None | 
|  | 169 #		 task = None | 
|  | 170 #	  } | 
|  | 171 # } | 
|  | 172 | 
|  | 173 | 
|  | 174 ################################ functions ############################################################ | 
|  | 175 ## Define a function to make a service perform the desired request using provided arguments | 
|  | 176 def call_run_service(service, args): | 
|  | 177 	""" | 
|  | 178 	Run job in RSAT server. | 
|  | 179 		service -> RSAT web service | 
|  | 180 		args -> web service request | 
|  | 181 	""" | 
|  | 182 | 
|  | 183 	result = rsat_service.peak_motifs(args) | 
|  | 184 	return result | 
|  | 185 | 
|  | 186 def testNone(argument): | 
|  | 187 	""" | 
|  | 188 	Test if argument is None or not. | 
|  | 189 		argument -> argument give by user | 
|  | 190 	""" | 
|  | 191 | 
|  | 192 	if not argument is None: | 
|  | 193 		variable = argument[0] | 
|  | 194 	else: | 
|  | 195 		variable = "" | 
|  | 196 	return variable | 
|  | 197 | 
|  | 198 | 
|  | 199 ###########################################################' | 
|  | 200 ## Function to recup results | 
|  | 201 | 
|  | 202 def buildZipUrl(algoResults): | 
|  | 203 	""" | 
|  | 204 	Recup results give by RSAT server. | 
|  | 205 		algoResults -> result give by RSAT server | 
|  | 206 	""" | 
|  | 207 | 
|  | 208 	recupResult = str(algoResults) | 
|  | 209 	tabResults=recupResult.split("\n") | 
|  | 210 	urlZip = tabResults[4].replace("\t","") | 
|  | 211 | 
|  | 212 	return urlZip | 
|  | 213 | 
|  | 214 | 
|  | 215 ## Tested with python 2.6.6 | 
|  | 216 peakMotifsVersion = '0.1 - 30/01/2015' | 
|  | 217 | 
|  | 218 ###########################################################' | 
|  | 219 # server dictionary | 
|  | 220 serverDict = { | 
|  | 221 | 
|  | 222 	"fr_ens":"http://rsat01.biologie.ens.fr/rsat/web_services/RSATWS.wsdl", | 
|  | 223 	"fr_mrs":"http://rsat-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | 
|  | 224 	"fr_ro":"http://rsat.sb-roscoff.fr/web_services/RSATWS.wsdl", | 
|  | 225 	"fr_mrs_2":"http://pedagogix-tagc.univ-mrs.fr/rsat/web_services/RSATWS.wsdl", | 
|  | 226 	"es":"http://floresta.eead.csic.es/rsat/web_services/RSATWS.wsdl", | 
|  | 227 	"mx":"http://embnet.ccg.unam.mx/rsa-tools/web_services/RSATWS.wsdl" | 
|  | 228 | 
|  | 229 	} | 
|  | 230 | 
|  | 231 """ | 
|  | 232 serverDict = { | 
|  | 233 | 
|  | 234 	"fr_ens":"http://protists.rsat.eu/rsat/web_services/RSATWS.wsdl", | 
|  | 235 	"fr_mrs":"http://fungi.rsat.eu/rsat/web_services/RSATWS.wsdl", | 
|  | 236 	"fr_ro":"http://metazoa.rsat.eu/web_services/RSATWS.wsdl", | 
|  | 237 	"fr_mrs_2":"http://teaching.rsat.eu/rsat/web_services/RSATWS.wsdl", | 
|  | 238 	"es":"http://plants.rsat.eu/rsat/web_services/RSATWS.wsdl", | 
|  | 239 	"mx":"http://prokaryotes.rsat.eu/rsa-tools/web_services/RSATWS.wsdl" | 
|  | 240 | 
|  | 241 	} | 
|  | 242 """ | 
|  | 243 | 
|  | 244 if __name__ == '__main__': | 
|  | 245 | 
|  | 246 	########### peak motifs arguments #################### | 
|  | 247 	parser = argparse.ArgumentParser(description='Client to download peak-motifs results from RSAT server.', epilog='Version '+peakMotifsVersion) | 
|  | 248 | 
|  | 249 	parser.add_argument('-test', '--test_file', metavar='<TEST_FILE>', type=argparse.FileType('r'), nargs=1, help='Input test peak sequence in fasta format.', required=True) | 
|  | 250 	parser.add_argument('-control', '--control_file', metavar='<CONTROL_FILE>', type=argparse.FileType('r'), nargs=1, help='Input control peak sequence in fasta format.', required=False) | 
|  | 251 	parser.add_argument('-max_seq_length', '--maxSeqLength', metavar='<MAX_SEQ_LENGTH>', type=int, nargs=1, help='Maximal sequence length.', required=False) | 
|  | 252 	parser.add_argument('-max_motif_number', '--maxMotifNumber', metavar='<MAX_MOTIF_NUMBER>', type=int, nargs=1, help='Maximal number of motifs (matrices) to return for pattern discovery algorithms.', required=False) | 
|  | 253 	parser.add_argument('-top_peaks', '--topPeaks', metavar='<TOP_PEAKS>', type=int, nargs=1, help='Restrict the analysis to the N peaks at the top of the input sequence file.', required=False) | 
|  | 254 	parser.add_argument('-min_length', '--minLength', metavar='<MIN_LENGTH>', type=int, nargs=1, help='Minimal oligonucleotide length.', required=False) | 
|  | 255 	parser.add_argument('-max_length', '--maxLength', metavar='<MAX_LENGTH>', type=int, nargs=1, help='Maximal oligonucleotide length.', required=False) | 
|  | 256 	parser.add_argument('-markov', '--markovModel', metavar='<MARKOV_MODEL>', type=int, nargs=1, help='Order of the Markov model used to estimatd expected oligonucleotide frequencies for oligo-analysis and local-word-analysis.', required=False) | 
|  | 257 	parser.add_argument('-min_markov', '--minMarkov', metavar='<MIN_MARKOV>', type=int, nargs=1, help='Minimal value for markov order. Use in combination with the next option (max_markov).', required=False) | 
|  | 258 	parser.add_argument('-max_markov', '--maxMarkov', metavar='<MAX_MARKOV>', type=int, nargs=1, help='Maximal value for markov order. Use in combination with the previous option (min_markov).', required=False) | 
|  | 259 	parser.add_argument('-noov', '--noovDetection', metavar='<NOOV_DETECTION>', type=int, nargs=1, help='No overlapping of oligos allowed if value = 1.', required=False) | 
|  | 260 	parser.add_argument('-class_int', '--classInt', metavar='<CLASS_INT>', type=int, nargs=1, help='Class interval for position-analysis. The width of the position classes, in number of bases (default: 20).', required=False) | 
|  | 261 	parser.add_argument('-str', '--strSummed', metavar='<STR_SUMMED>', type=int, nargs=1, help='Oligonucleotide occurrences found on both stands are summed (2) or not (1). Default is 2.', required=False) | 
|  | 262 	parser.add_argument('-graph_title', '--graphTitle', metavar='<GRAPH_TITLE>', type=str, nargs=1, help='Title displayed on top of the graphs.', required=False) | 
|  | 263 	parser.add_argument('-image_format', '--imageFormat', metavar='<IMAGE_FORMAT>', type=str, nargs=1, help='Image format. All the formats supported by XYgraph can be used.', required=False) | 
|  | 264 	parser.add_argument('-disco', '--discoAlgorithm', metavar='<DISCO_ALGORITHM>', type=str, nargs='*', help='Specify the software tool(s) that will be used for motif discovery (oligos|dyads|positions|local_words|merged_words). Several algorithms can be specified either by using a comma-separated list of algorithms: -disco oligos,dyads', required=False) | 
|  | 265 	parser.add_argument('-source', '--sourceFile', metavar='<SOURCE_FILE>', type=str, nargs=1, help='Enter the source of the fasta sequence file. Supported source: galaxy', required=False) | 
|  | 266 	parser.add_argument('-verb', '--verbosity', metavar='<VERBOSITY>', type=int, nargs=1, help='Verbosity.', required=False) | 
|  | 267 	parser.add_argument('-ref_motif', '--ref_motif', metavar='<REF_MOTIF>', type=argparse.FileType('r'), nargs=1, help='Motif annotated in some transcription factor database (e.g. RegulonDB, Jaspar, TRANSFAC) for the transcription factor of interest.', required=False) | 
|  | 268 	parser.add_argument('-motif_db', '--motif_db', metavar='<MOTIF_DB>', type=str, nargs=1, help='Name of motif database.', required=False) | 
|  | 269 | 
|  | 270 	################################ galaxy arguments ############################################################ | 
|  | 271 	parser.add_argument('-outGalaxy', '--outGalaxy', metavar='<OUT_GALAXY>', type=str, nargs=1, required=True) | 
|  | 272         parser.add_argument('-outGalaxy2', '--outGalaxy2', metavar='<OUT_GALAXY2>', type=str, nargs=1, required=False) | 
|  | 273 	parser.add_argument('-server', '--server', metavar='<SERVEUR>', type=str, nargs=1, help='RSAT server', required=True) | 
|  | 274 	###########################################################' | 
|  | 275 | 
|  | 276 	args = parser.parse_args() | 
|  | 277 | 
|  | 278 	########################################################### | 
|  | 279 	## Test arguments | 
|  | 280 | 
|  | 281 	fasta_test_file = args.test_file[0].read() | 
|  | 282 | 
|  | 283 	if not args.control_file is None : | 
|  | 284 		fasta_control_file = args.control_file[0].read() | 
|  | 285 	else : | 
|  | 286 		fasta_control_file ="" | 
|  | 287 | 
|  | 288 	if not args.ref_motif is None : | 
|  | 289 		refMotifValue = args.ref_motif[0].read() | 
|  | 290 	else : | 
|  | 291 		refMotifValue ="" | 
|  | 292 | 
|  | 293 	maxSeqLengthValue = testNone(args.maxSeqLength) | 
|  | 294 	maxMotifNumberValue = testNone(args.maxMotifNumber) | 
|  | 295 	topPeaksNumber = testNone(args.topPeaks) | 
|  | 296 	minLengthNumber = testNone(args.minLength) | 
|  | 297 	maxLengthNumber = testNone(args.maxLength) | 
|  | 298 	markovModelValue = testNone(args.markovModel) | 
|  | 299 	minMarkovValue = testNone(args.minMarkov) | 
|  | 300 	maxMarkovValue = testNone(args.maxMarkov) | 
|  | 301 	noovValue = testNone(args.noovDetection) | 
|  | 302 	classIntValue = testNone(args.classInt) | 
|  | 303 	strSummedValue = testNone(args.strSummed) | 
|  | 304 	graphTitleValue = testNone(args.graphTitle) | 
|  | 305 	imageFormatValue = testNone(args.imageFormat) | 
|  | 306 	discoAlgorithmValue = testNone(args.discoAlgorithm) | 
|  | 307 	sourceFileValue = testNone(args.sourceFile) | 
|  | 308 	verbosityValue = testNone(args.verbosity) | 
|  | 309 	motifdbValue = testNone(args.motif_db) | 
|  | 310 	outGalaxyValue = testNone(args.outGalaxy) | 
|  | 311         outGalaxyValue2 = testNone(args.outGalaxy2) | 
|  | 312 	serverValue = testNone(args.server) | 
|  | 313 | 
|  | 314 	###########################################################' | 
|  | 315 	## Create the SOAP client to request the RSAT service | 
|  | 316 | 
|  | 317 	# Define URL for RSAT services | 
|  | 318 	url =  serverDict[serverValue] | 
|  | 319 	print url | 
|  | 320 | 
|  | 321 	# Create the client | 
|  | 322 	client = Client(url) | 
|  | 323 | 
|  | 324 	# Need service interface to perform requests | 
|  | 325 	rsat_service = client.service | 
|  | 326 | 
|  | 327 	# Define client header | 
|  | 328 	userAgent = 'RSAT-Client/v%s (%s; Python %s; %s)' % ( | 
|  | 329 		peakMotifsVersion, | 
|  | 330 		os.path.basename( __file__ ), | 
|  | 331 		platform.python_version(), | 
|  | 332 		platform.system() | 
|  | 333 	) | 
|  | 334 | 
|  | 335 	httpHeaders = {'User-agent': userAgent} | 
|  | 336 	client.set_options(headers=httpHeaders) | 
|  | 337 	client.set_options(timeout=300) | 
|  | 338 | 
|  | 339 | 
|  | 340 	###########################################################' | 
|  | 341 	## Create request | 
|  | 342 	peakMotifsRequest = { | 
|  | 343 | 
|  | 344 		'test' : fasta_test_file, | 
|  | 345 		'control' : fasta_control_file, | 
|  | 346 		'max_seq_length' : maxSeqLengthValue, | 
|  | 347 		'max_motif_number' : maxMotifNumberValue, | 
|  | 348 		'top_peaks' : topPeaksNumber, | 
|  | 349 		'min_length' : minLengthNumber, | 
|  | 350 		'max_length' : maxLengthNumber, | 
|  | 351 		'markov' : markovModelValue, | 
|  | 352 		'min_markov' : minMarkovValue, | 
|  | 353 		'max_markov' : maxMarkovValue, | 
|  | 354 		'noov' : noovValue, | 
|  | 355 		'class_int' : classIntValue, | 
|  | 356 		'str' : strSummedValue, | 
|  | 357 		'graph_title' : graphTitleValue, | 
|  | 358 		'image_format' : imageFormatValue, | 
|  | 359 		'disco' : discoAlgorithmValue, | 
|  | 360 		'source' : sourceFileValue, | 
|  | 361 		'ref_motif' : refMotifValue, | 
|  | 362 		'verbosity' : verbosityValue, | 
|  | 363 		'motif_db' : motifdbValue | 
|  | 364 		#'output' : 'blablabla' | 
|  | 365 | 
|  | 366 	} | 
|  | 367 | 
|  | 368 | 
|  | 369 	###########################################################' | 
|  | 370 	## Run job in RSAT server | 
|  | 371 	result = call_run_service(rsat_service, peakMotifsRequest) | 
|  | 372 | 
|  | 373 	#logFile = open("/bioinfo/users/jbrayet/Bureau/peak_motifs.log","w") | 
|  | 374 | 
|  | 375 	#logFile.write("###############################################\n") | 
|  | 376 	#logFile.write("Command performed on server\n") | 
|  | 377 	#logFile.write(result.command) | 
|  | 378 	#logFile.write("\n") | 
|  | 379 	#logFile.write("###############################################\n") | 
|  | 380 	#logFile.write("Result\n") | 
|  | 381 	#logFile.write(result.server) | 
|  | 382 | 
|  | 383 	print("###############################################\n") | 
|  | 384 	print("Command performed on server\n") | 
|  | 385 	print(result.command) | 
|  | 386 	print("\n") | 
|  | 387 	print("###############################################\n") | 
|  | 388 	print("Result\n") | 
|  | 389 	print(result.server) | 
|  | 390 | 
|  | 391 	###########################################################' | 
|  | 392 	## Build result URL | 
|  | 393 | 
|  | 394 	""" | 
|  | 395 	zipFileDict = { | 
|  | 396 | 
|  | 397 		"fr_ens":"http://protists.rsat.eu/rsat/", | 
|  | 398 		"fr_mrs":"http://fungi.rsat.eu/rsat/", | 
|  | 399 		"fr_ro":"http://metazoa.rsat.eu/", | 
|  | 400 		"fr_mrs_2":"http://teaching.rsat.eu/rsat/", | 
|  | 401 		"es":"http://plants.rsat.eu/rsat/", | 
|  | 402 		"mx":"http://prokaryotes.rsat.eu/rsa-tools/" | 
|  | 403 | 
|  | 404 		} | 
|  | 405 	""" | 
|  | 406 | 
|  | 407 	nameFile = "peak-motifs_results.zip" | 
|  | 408 	urlResult=buildZipUrl(result.server) | 
|  | 409 	print urlResult | 
|  | 410 | 
|  | 411 	#ogFile.write("\n"+urlResult) | 
|  | 412 | 
|  | 413 	###########################################################' | 
|  | 414 	## Wait RSAT server | 
|  | 415 	while urllib.urlopen(urlResult).getcode() != 200: | 
|  | 416 	#logFile.write(str(urllib.urlopen(urlResult).getcode())+"\n") | 
|  | 417 		time.sleep(5) | 
|  | 418 | 
|  | 419 	#logFile.write(str(nameFile)+"\n") | 
|  | 420 | 
|  | 421 	#while urllib.urlretrieve(urlResult, nameFile) | 
|  | 422 	#try: | 
|  | 423 	###########################################################' | 
|  | 424 	## Download RSAT results | 
|  | 425 	urllib.urlretrieve(urlResult, nameFile) | 
|  | 426 	#except IOError: | 
|  | 427 	#logFile.write("\nResult URL is false") | 
|  | 428 	#Logger.error("Result URL is false") | 
|  | 429 | 
|  | 430 | 
|  | 431 	#logFile.write("\n"+nameFile+"\n") | 
|  | 432 | 
|  | 433 	###########################################################' | 
|  | 434 	## Decompress results | 
|  | 435 	#try: | 
|  | 436 	zfile = zipfile.ZipFile(nameFile, 'r') | 
|  | 437 	#except IOError: | 
|  | 438 	#logFile.write("No zip file") | 
|  | 439 	#Logger.error("No zip file") | 
|  | 440 | 
|  | 441 	tempflag = 0 | 
|  | 442 	folderName ="" | 
|  | 443 | 
|  | 444 	for i in zfile.namelist():  ## On parcourt l'ensemble des fichiers de l'archive | 
|  | 445 | 
|  | 446 		#logFile.write(i+"\n") | 
|  | 447 		############################### | 
|  | 448 			if tempflag ==0: | 
|  | 449 				folderName = i | 
|  | 450 | 
|  | 451 			tempflag = 1 | 
|  | 452 		############################### | 
|  | 453 | 
|  | 454 			if i.endswith('/'):   ## S'il s'agit d'un repertoire, on se contente de creer le dossier | 
|  | 455 				os.makedirs(i) | 
|  | 456 			else: | 
|  | 457 				data = zfile.read(i)	## lecture du fichier compresse | 
|  | 458 				fp = open(i, "wb")	  ## creation en local du nouveau fichier | 
|  | 459 				fp.write(data)		  ## ajout des donnees du fichier compresse dans le fichier local | 
|  | 460 				fp.close() | 
|  | 461 	zfile.close() | 
|  | 462 | 
|  | 463 	#logFile.write("\n"+folderName+"\n") | 
|  | 464 	#logFile.write("\n"+outGalaxyValue+"\n") | 
|  | 465 | 
|  | 466         os.popen("cp "+folderName+"peak-motifs_synthesis.html "+outGalaxyValue) | 
|  | 467 	os.popen("cp "+nameFile+" "+folderName) | 
|  | 468         #logFile.close() | 
|  | 469         #os.popen("sed -i \"1iHHEELLLOOO\" "+outGalaxyValue) | 
|  | 470         #os.popen("sed -i \"1i<style type=\'text/css\'></style>\" "+outGalaxyValue) | 
|  | 471 | 
|  | 472         ###########################################################' | 
|  | 473         ##Create results folder name | 
|  | 474         outGalaxyValueDir = outGalaxyValue.replace(".dat","_files") | 
|  | 475 | 
|  | 476         #logFile.write("\noutGalaxyValueDir : " +outGalaxyValueDir) | 
|  | 477 | 
|  | 478         #logFile.close() | 
|  | 479 | 
|  | 480         # Create results folder | 
|  | 481         os.popen("mkdir "+outGalaxyValueDir) | 
|  | 482 | 
|  | 483         # Copy results files in results folder | 
|  | 484         os.popen("cp -R "+folderName+"data " + outGalaxyValueDir+"/data") | 
|  | 485         os.popen("cp -R "+folderName+"reports " + outGalaxyValueDir+"/reports") | 
|  | 486         os.popen("cp -R "+folderName+"results " + outGalaxyValueDir+"/results") | 
|  | 487 | 
|  | 488         if not outGalaxyValue2 =="": | 
|  | 489             os.popen("cp "+folderName+"results/sites/peak-motifs_all_motifs_seqcoord.bed "+outGalaxyValue2) | 
|  | 490 | 
|  | 491 | 
|  | 492 | 
|  | 493 | 
|  | 494 | 
|  | 495 | 
|  | 496 |