Mercurial > repos > rmarenco > hubarchivecreator
comparison hubArchiveCreator.py @ 13:25809f699cb3 draft
planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit 65ab931ef2b05a5acf06cbde3a746c94a0a0a4cb
author | rmarenco |
---|---|
date | Thu, 11 Aug 2016 19:02:29 -0400 |
parents | d05236b15f81 |
children | 3233451a3bd6 |
comparison
equal
deleted
inserted
replaced
12:747475757cb0 | 13:25809f699cb3 |
---|---|
9 """ | 9 """ |
10 | 10 |
11 import argparse | 11 import argparse |
12 import collections | 12 import collections |
13 import json | 13 import json |
14 import logging | |
15 import os | |
14 import sys | 16 import sys |
15 | 17 |
16 # Internal dependencies | 18 # Internal dependencies |
17 from Bam import Bam | 19 from Bam import Bam |
18 from BedSimpleRepeats import BedSimpleRepeats | 20 from BedSimpleRepeats import BedSimpleRepeats |
19 from Bed import Bed | 21 from Bed import Bed |
20 from BigWig import BigWig | 22 from BigWig import BigWig |
21 from util.Fasta import Fasta | 23 from util.Fasta import Fasta |
24 from util.Filters import TraceBackFormatter | |
22 from Gff3 import Gff3 | 25 from Gff3 import Gff3 |
23 from Gtf import Gtf | 26 from Gtf import Gtf |
24 from TrackHub import TrackHub | 27 from TrackHub import TrackHub |
25 | |
26 | 28 |
27 # TODO: Verify each subprocessed dependency is accessible [gff3ToGenePred, genePredToBed, twoBitInfo, faToTwoBit, bedToBigBed, sort | 29 # TODO: Verify each subprocessed dependency is accessible [gff3ToGenePred, genePredToBed, twoBitInfo, faToTwoBit, bedToBigBed, sort |
28 | 30 |
29 | 31 |
30 def main(argv): | 32 def main(argv): |
65 | 67 |
66 parser.add_argument('--user_email', help='Email of the user who launched the Hub Archive Creation') | 68 parser.add_argument('--user_email', help='Email of the user who launched the Hub Archive Creation') |
67 | 69 |
68 parser.add_argument('--genome_name', help='UCSC Genome Browser assembly ID') | 70 parser.add_argument('--genome_name', help='UCSC Genome Browser assembly ID') |
69 | 71 |
70 ucsc_tools_path = '' | 72 parser.add_argument('--debug_mode', action='store_true', help='Allow more details about the errors') |
73 | |
74 # Begin init variables | |
71 | 75 |
72 toolDirectory = '.' | 76 toolDirectory = '.' |
73 extra_files_path = '.' | 77 extra_files_path = '.' |
74 | 78 |
75 # Get the args passed in parameter | 79 # Get the args passed in parameter |
76 args = parser.parse_args() | 80 args = parser.parse_args() |
81 | |
82 extra_files_path = args.extra_files_path | |
83 toolDirectory = args.directory | |
84 | |
85 #### Logging management #### | |
86 # If we are in Debug mode, also print in stdout the debug dump | |
87 | |
88 configure_logger(extra_files_path=extra_files_path, debug=args.debug_mode) | |
89 | |
90 #### END Logging management #### | |
77 | 91 |
78 array_inputs_reference_genome = json.loads(args.fasta) | 92 array_inputs_reference_genome = json.loads(args.fasta) |
79 | 93 |
80 # TODO: Replace these with the object Fasta | 94 # TODO: Replace these with the object Fasta |
81 input_fasta_file = array_inputs_reference_genome["false_path"] | 95 input_fasta_file = array_inputs_reference_genome["false_path"] |
98 array_inputs_gtf = args.gtf | 112 array_inputs_gtf = args.gtf |
99 array_inputs_bam = args.bam | 113 array_inputs_bam = args.bam |
100 array_inputs_bigwig = args.bigwig | 114 array_inputs_bigwig = args.bigwig |
101 | 115 |
102 outputFile = args.output | 116 outputFile = args.output |
103 json_inputs_data = args.data_json | |
104 | 117 |
105 json_inputs_data = args.data_json | 118 json_inputs_data = args.data_json |
106 | 119 |
107 inputs_data = json.loads(json_inputs_data) | 120 inputs_data = json.loads(json_inputs_data) |
108 # We remove the spaces in ["name"] of inputs_data | 121 # We remove the spaces in ["name"] of inputs_data |
109 sanitize_name_inputs(inputs_data) | 122 sanitize_name_inputs(inputs_data) |
110 | 123 |
111 if args.directory: | |
112 toolDirectory = args.directory | |
113 if args.extra_files_path: | |
114 extra_files_path = args.extra_files_path | |
115 | 124 |
116 # TODO: Check here all the binaries / tools we need. Exception if missing | 125 # TODO: Check here all the binaries / tools we need. Exception if missing |
117 | 126 |
118 # Create the Track Hub folder | 127 # Create the Track Hub folder |
119 trackHub = TrackHub(reference_genome, user_email, outputFile, extra_files_path, toolDirectory) | 128 trackHub = TrackHub(reference_genome, user_email, outputFile, extra_files_path, toolDirectory) |
139 #trackHub.createZip() | 148 #trackHub.createZip() |
140 | 149 |
141 # We terminate le process and so create a HTML file summarizing all the files | 150 # We terminate le process and so create a HTML file summarizing all the files |
142 trackHub.terminate() | 151 trackHub.terminate() |
143 | 152 |
144 print "\t" | 153 logging.debug('#### End of HubArchiveCreator Debug Mode: Bye! ####') |
145 print "--------------" | |
146 print "Well done guys! Your data are ready to be displayed in UCSC Track Hub." | |
147 | 154 |
148 sys.exit(0) | 155 sys.exit(0) |
149 | 156 |
150 | 157 |
151 def sanitize_name_input(string_to_sanitize): | 158 def sanitize_name_input(string_to_sanitize): |
182 if key == input_false_path: | 189 if key == input_false_path: |
183 extensionObject = ExtensionClass(input_false_path, data_value) | 190 extensionObject = ExtensionClass(input_false_path, data_value) |
184 datatype_dictionary.update({data_value["order_index"]: extensionObject}) | 191 datatype_dictionary.update({data_value["order_index"]: extensionObject}) |
185 return datatype_dictionary | 192 return datatype_dictionary |
186 | 193 |
194 def configure_logger(extra_files_path=None, debug=False): | |
195 if not extra_files_path: | |
196 raise Exception("Extra files path is not set. Stopping the application") | |
197 | |
198 | |
199 # All case log: log everything in a .log file | |
200 logger_file_name = ''.join([__name__, '.log']) | |
201 logging_file_path = os.path.join(extra_files_path, logger_file_name) | |
202 | |
203 logging.basicConfig(filename=logging_file_path, level=logging.DEBUG) | |
204 | |
205 log_stdout = logging.StreamHandler(sys.stdout) | |
206 if not debug: | |
207 configure_logger_user(log_stdout) | |
208 else: | |
209 configure_logger_dev(log_stdout) | |
210 | |
211 # stderr configuration | |
212 configure_logger_stderr() | |
213 | |
214 logging.debug('#### Welcome in HubArchiveCreator Debug Mode ####\n') | |
215 | |
216 def configure_logger_user(log_stdout=None): | |
217 """ | |
218 User Logger is defined as following: | |
219 - User needs to have WARN, ERROR and CRITICAL but well formatted / without traceback | |
220 in STDOUT | |
221 - Still access to full, brute and traceback for errors | |
222 in STDERR | |
223 - And further access to debug if needed | |
224 in .log | |
225 :return: | |
226 """ | |
227 if not log_stdout: | |
228 raise Exception("No log_stdout given. Stopping the application") | |
229 | |
230 # stdout for INFO / WARN / ERROR / CRITICAL | |
231 log_stdout.setLevel(logging.INFO) | |
232 | |
233 formatter = TraceBackFormatter('%(message)s') | |
234 | |
235 log_stdout.setFormatter(formatter) | |
236 | |
237 logging.getLogger().addHandler(log_stdout) | |
238 | |
239 def configure_logger_dev(log_stdout=None): | |
240 """ | |
241 Dev Logger is defined as following: | |
242 - Dev needs to have WARN, ERROR and CRITICAL but well formatted / without traceback, in stdout | |
243 - Still access to full, brute and traceback in stderr for errors | |
244 - And further access to debug if needed | |
245 :return: | |
246 """ | |
247 if not log_stdout: | |
248 raise Exception("No log_stdout given. Stopping the application") | |
249 log_format = '%(message)s' | |
250 | |
251 # stdout and stderr and both identical for INFO / WARN / ERROR / CRITICAL | |
252 log_stdout.setLevel(logging.DEBUG) | |
253 | |
254 formatter = logging.Formatter(log_format) | |
255 | |
256 log_stdout.setFormatter(formatter) | |
257 | |
258 logging.getLogger().addHandler(log_stdout) | |
259 | |
260 def configure_logger_stderr(): | |
261 """ | |
262 Configure what should be logged in stderr | |
263 :return: | |
264 """ | |
265 log_error = logging.StreamHandler(sys.stderr) | |
266 log_error.setLevel(logging.ERROR) | |
267 log_error_format = '%(message)s' | |
268 | |
269 formatter_error = logging.Formatter(log_error_format) | |
270 | |
271 log_error.setFormatter(formatter_error) | |
272 | |
273 logging.getLogger().addHandler(log_error) | |
274 | |
187 if __name__ == "__main__": | 275 if __name__ == "__main__": |
276 logging.getLogger(__name__) | |
188 main(sys.argv) | 277 main(sys.argv) |