Mercurial > repos > iuc > data_manager_primer_scheme_bedfiles
comparison data_manager/install_primer_scheme_bedfiles.py @ 2:b3710e492ee4 draft
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_primer_scheme_bedfiles commit 61b727022bd1b24a8843830a9c5f34ef66835694"
author | iuc |
---|---|
date | Mon, 22 Jun 2020 18:26:10 -0400 |
parents | cce5d9327cd6 |
children | a2953ef09fe1 |
comparison
equal
deleted
inserted
replaced
1:cce5d9327cd6 | 2:b3710e492ee4 |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 | 2 |
3 from __future__ import print_function, division | 3 from __future__ import division, print_function |
4 | 4 |
5 import argparse | 5 import argparse |
6 try: | |
7 from io import StringIO | |
8 except ImportError: | |
9 from StringIO import StringIO | |
6 import json | 10 import json |
7 import os | 11 import os |
8 import os.path | 12 import os.path |
9 import re | 13 import re |
10 import sys | 14 import sys |
11 import shutil | |
12 | 15 |
13 import requests | 16 import requests |
14 | 17 |
15 DATA_TABLE_NAME = "primer_scheme_bedfiles" | 18 DATA_TABLE_NAME = "primer_scheme_bedfiles" |
19 | |
20 | |
21 def write_good_bed(input_file, bed_output_filename): | |
22 with open(bed_output_filename, "w") as bed_output_file: | |
23 for line in input_file: | |
24 fields = line.split("\t") | |
25 if len(fields) < 6: | |
26 # too short to encode the strand format | |
27 exit("invalid format in BED file: {}".format(line.rstrip())) | |
28 try: | |
29 # try and parse field 5 as a number | |
30 float(fields[4]) | |
31 except ValueError: | |
32 # ARTIC with broken BED, set field 5 to 60 | |
33 fields[4] = "60" | |
34 bed_output_file.write("\t".join(fields)) | |
16 | 35 |
17 | 36 |
18 def fetch_artic_primers(output_directory, primers): | 37 def fetch_artic_primers(output_directory, primers): |
19 primer_sets = { | 38 primer_sets = { |
20 "SARS-CoV-2-ARTICv1": "https://raw.githubusercontent.com/artic-network/artic-ncov2019/master/primer_schemes/nCoV-2019/V1/nCoV-2019.bed", | 39 "SARS-CoV-2-ARTICv1": "https://raw.githubusercontent.com/artic-network/artic-ncov2019/master/primer_schemes/nCoV-2019/V1/nCoV-2019.bed", |
35 response.status_code, | 54 response.status_code, |
36 file=sys.stderr, | 55 file=sys.stderr, |
37 ) | 56 ) |
38 exit(response.status_code) | 57 exit(response.status_code) |
39 bed_output_filename = os.path.join(output_directory, name + ".bed") | 58 bed_output_filename = os.path.join(output_directory, name + ".bed") |
40 open(bed_output_filename, "w").write(response.text) | 59 write_good_bed(StringIO(response.text), bed_output_filename) |
41 description = name[:-2] + " " + name[-2:] + " primer set" | 60 description = name[:-2] + " " + name[-2:] + " primer set" |
42 data.append(dict(value=name, path=bed_output_filename, description=description)) | 61 data.append(dict(value=name, path=bed_output_filename, description=description)) |
43 return data | 62 return data |
44 | 63 |
45 | 64 |
46 def install_primer_file( | 65 def install_primer_file( |
47 output_directory, input_filename, primer_name, primer_description | 66 output_directory, input_filename, primer_name, primer_description |
48 ): | 67 ): |
49 name = re.sub(r"\W", "", str(primer_name).replace(" ", "_")) | 68 name = re.sub(r"\W", "", str(primer_name).replace(" ", "_")) |
50 output_filename = os.path.join(output_directory, name + ".bed") | 69 output_filename = os.path.join(output_directory, name + ".bed") |
51 shutil.copyfile(input_filename, output_filename) | 70 with open(input_filename) as input_file: |
71 write_good_bed(input_file, output_filename) | |
52 data = [dict(value=name, description=primer_description, path=output_filename)] | 72 data = [dict(value=name, description=primer_description, path=output_filename)] |
53 return data | 73 return data |
54 | 74 |
55 | 75 |
56 class SplitArgs(argparse.Action): | 76 class SplitArgs(argparse.Action): |