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):