comparison data_manager/install_primer_scheme_bedfiles.py @ 3:a2953ef09fe1 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_primer_scheme_bedfiles commit 1e0936cb95a0318809b3306fad43ce444d7682b0"
author iuc
date Mon, 12 Oct 2020 13:47:03 +0000
parents b3710e492ee4
children 157a5c9ea72a
comparison
equal deleted inserted replaced
2:b3710e492ee4 3:a2953ef09fe1
16 import requests 16 import requests
17 17
18 DATA_TABLE_NAME = "primer_scheme_bedfiles" 18 DATA_TABLE_NAME = "primer_scheme_bedfiles"
19 19
20 20
21 def write_good_bed(input_file, bed_output_filename): 21 def write_artic_style_bed(input_file, bed_output_filename):
22 with open(bed_output_filename, "w") as bed_output_file: 22 with open(bed_output_filename, "w") as bed_output_file:
23 for line in input_file: 23 for line in input_file:
24 fields = line.split("\t") 24 fields = line.split("\t")
25 if len(fields) < 6: 25 if len(fields) < 6:
26 # too short to encode the strand format 26 # too short to encode the strand format
27 exit("invalid format in BED file: {}".format(line.rstrip())) 27 exit("invalid format in BED file: {}".format(line.rstrip()))
28 try: 28 try:
29 # try and parse field 5 as a number 29 # try and parse field 5 as a number
30 float(fields[4]) 30 score = float(fields[4])
31 except ValueError: 31 except ValueError:
32 # ARTIC with broken BED, set field 5 to 60 32 # Alright, this is an ARTIC-style bed,
33 fields[4] = "60" 33 # which is actually against the specs, but required by the
34 # ARTIC pipeline.
35 pass
36 else:
37 # This is a regular bed with numbers in the score column.
38 # We need to "fix" it for the ARTIC pipeline.
39 fields[4] = '_{0}'.format(score)
34 bed_output_file.write("\t".join(fields)) 40 bed_output_file.write("\t".join(fields))
35 41
36 42
37 def fetch_artic_primers(output_directory, primers): 43 def fetch_artic_primers(output_directory, primers):
38 primer_sets = { 44 primer_sets = {
54 response.status_code, 60 response.status_code,
55 file=sys.stderr, 61 file=sys.stderr,
56 ) 62 )
57 exit(response.status_code) 63 exit(response.status_code)
58 bed_output_filename = os.path.join(output_directory, name + ".bed") 64 bed_output_filename = os.path.join(output_directory, name + ".bed")
59 write_good_bed(StringIO(response.text), bed_output_filename) 65 write_artic_style_bed(StringIO(response.text), bed_output_filename)
60 description = name[:-2] + " " + name[-2:] + " primer set" 66 description = name[:-2] + " " + name[-2:] + " primer set"
61 data.append(dict(value=name, path=bed_output_filename, description=description)) 67 data.append(dict(value=name, path=bed_output_filename, description=description))
62 return data 68 return data
63 69
64 70
66 output_directory, input_filename, primer_name, primer_description 72 output_directory, input_filename, primer_name, primer_description
67 ): 73 ):
68 name = re.sub(r"\W", "", str(primer_name).replace(" ", "_")) 74 name = re.sub(r"\W", "", str(primer_name).replace(" ", "_"))
69 output_filename = os.path.join(output_directory, name + ".bed") 75 output_filename = os.path.join(output_directory, name + ".bed")
70 with open(input_filename) as input_file: 76 with open(input_filename) as input_file:
71 write_good_bed(input_file, output_filename) 77 write_artic_style_bed(input_file, output_filename)
72 data = [dict(value=name, description=primer_description, path=output_filename)] 78 data = [dict(value=name, description=primer_description, path=output_filename)]
73 return data 79 return data
74 80
75 81
76 class SplitArgs(argparse.Action): 82 class SplitArgs(argparse.Action):