annotate 0.2.0/bin/dl_pubmlst_profiles_and_schemes.py @ 0:9e8b1c747a6a draft default tip

planemo upload
author galaxytrakr
date Fri, 29 May 2026 13:32:17 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
1 #!/usr/bin/env python3
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
2
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
3 # Kranti Konganti
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
4
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
5 import argparse
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
6 import inspect
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
7 import json
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
8 import logging
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
9 import os
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
10 import shutil
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
11 import tempfile
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
12 from urllib.parse import urlparse
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
13 from urllib.request import urlopen
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
14
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
15 # Set logging format.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
16 logging.basicConfig(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
17 format="\n" + "=" * 55 + "\n%(asctime)s - %(levelname)s\n" + "=" * 55 + "\n%(message)s\n",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
18 level=logging.DEBUG,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
19 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
20
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
21
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
22 # Multiple inheritence for pretty printing of help text.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
23 class MultiArgFormatClasses(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
24 pass
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
25
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
26
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
27 def dl_pubmlst(**kwargs) -> None:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
28 """
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
29 Method to save the Raw Data from a URL.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
30 """
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
31 outdir, url, suffix, parent, filename, expectjson = [kwargs[k] for k in kwargs.keys()]
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
32
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
33 if (outdir or url) == None:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
34 logging.error("Please provide absolute UNIX path\n" + "to store the result DB flat files.")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
35 exit(1)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
36
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
37 logging.info(f"Downloading... Please wait...\n{url}")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
38
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
39 with urlopen(url) as response:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
40 with tempfile.NamedTemporaryFile(delete=False) as tmp_html_file:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
41 shutil.copyfileobj(response, tmp_html_file)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
42
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
43 if expectjson:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
44 try:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
45 jsonresponse = json.load(open(tmp_html_file.name, "r"))
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
46 except json.JSONDecodeError:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
47 logging.error(f"The response from\n{url}\nwas not valid JSON!")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
48 exit(1)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
49
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
50 logging.info(f"Got a valid JSON response from:\n{url}")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
51 return jsonresponse
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
52
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
53 if not parent:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
54 if not filename:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
55 save_to = os.path.join(outdir, os.path.basename(urlparse(url).path) + suffix)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
56 else:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
57 save_to = os.path.join(outdir, filename + suffix)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
58
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
59 logging.info(f"Saving to:\n{os.path.basename(save_to)}")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
60
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
61 with urlopen(url) as url_response:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
62 with open(save_to, "w") as fout:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
63 fout.writelines(url_response.read().decode("utf-8"))
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
64
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
65 fout.close()
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
66 url_response.close()
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
67
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
68
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
69 def main() -> None:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
70 """
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
71 This script is part of the `cronology_db` Nextflow workflow and is only
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
72 tested on POSIX sytems.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
73 It:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
74 1. Downloads the MLST scheme in JSON format from PubMLST.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
75 and then,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
76 2. Downloads the alleles' FASTA and profile table
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
77 suitable to run MLST analysis.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
78 """
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
79
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
80 prog_name = os.path.basename(inspect.stack()[0].filename)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
81
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
82 parser = argparse.ArgumentParser(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
83 prog=prog_name, description=main.__doc__, formatter_class=MultiArgFormatClasses
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
84 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
85
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
86 required = parser.add_argument_group("required arguments")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
87
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
88 required.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
89 "-org",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
90 dest="organism",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
91 required=True,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
92 help="The organism name to download the MLST alleles'\nFASTA and profile CSV for."
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
93 + "\nEx: -org cronobacter",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
94 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
95 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
96 "-f",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
97 dest="overwrite",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
98 default=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
99 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
100 action="store_true",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
101 help="Force overwrite the results directory\nmentioned with -out.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
102 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
103 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
104 "-out",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
105 dest="outdir",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
106 default=os.getcwd(),
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
107 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
108 help="The absolute UNIX path to store the MLST alleles'\nFASTA and profile CSV.\n",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
109 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
110 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
111 "-mlsts",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
112 dest="schemes",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
113 default="schemes/1",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
114 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
115 help="The MLST scheme ID to download.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
116 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
117 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
118 "-profile",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
119 dest="profile",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
120 default="profiles_csv",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
121 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
122 help="The MLST profile name in the scheme.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
123 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
124 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
125 "-loci",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
126 dest="loci",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
127 default="loci",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
128 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
129 help="The key name in the JSON response which lists the\nallele URLs to download.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
130 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
131 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
132 "-suffix",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
133 dest="asuffix",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
134 default=".tfa",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
135 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
136 help="What should be the suffix of the downloaded allele\nFASTA.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
137 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
138 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
139 "-akey",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
140 dest="allele_fa_key",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
141 default="alleles_fasta",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
142 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
143 help="What is the key in the JSON response that contains\nthe URL for allele FASTA.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
144 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
145 parser.add_argument(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
146 "-id",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
147 dest="id_key",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
148 default="id",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
149 required=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
150 help="What is the key in the JSON response that contains\nthe name of the allele FASTA.",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
151 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
152
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
153 args = parser.parse_args()
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
154 org = args.organism
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
155 outdir = os.path.join(args.outdir, org)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
156 overwrite = args.overwrite
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
157 pubmlst_loc = "_".join(["https://rest.pubmlst.org/db/pubmlst", org, "seqdef"])
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
158 schemes = args.schemes
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
159 profile = args.profile
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
160 loci = args.loci
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
161 suffix = args.asuffix
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
162 allele_fa_key = args.allele_fa_key
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
163 id_key = args.id_key
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
164
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
165 if not overwrite and os.path.exists(outdir):
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
166 logging.error(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
167 f"Output directory\n{os.path.basename(outdir)}\nexists. Please use -f to overwrite."
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
168 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
169 exit(1)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
170 elif overwrite and os.path.exists(outdir):
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
171 shutil.rmtree(outdir, ignore_errors=True)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
172
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
173 # Create required output directory.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
174 os.makedirs(outdir)
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
175
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
176 # Query MLST scheme for an organism.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
177 pubmlst_json = dl_pubmlst(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
178 path=outdir,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
179 url="/".join([pubmlst_loc, schemes]),
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
180 suffix=suffix,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
181 parent=True,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
182 filename=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
183 expectjson=True,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
184 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
185
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
186 # Save profile_csv as organism.txt.
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
187 if profile in pubmlst_json.keys():
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
188 dl_pubmlst(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
189 path=outdir,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
190 url=pubmlst_json[profile],
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
191 suffix=".txt",
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
192 parent=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
193 filename=org,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
194 expectjson=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
195 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
196
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
197 # Save MLST alleles' FASTA
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
198 if loci in pubmlst_json.keys():
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
199 for allele in pubmlst_json[loci]:
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
200 allele_fa_json = dl_pubmlst(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
201 path=outdir,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
202 url=allele,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
203 suffix=suffix,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
204 parent=True,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
205 filename=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
206 expectJson=True,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
207 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
208
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
209 dl_pubmlst(
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
210 path=outdir,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
211 url=allele_fa_json[allele_fa_key],
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
212 suffix=suffix,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
213 parent=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
214 filename=allele_fa_json[id_key],
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
215 expectJson=False,
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
216 )
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
217
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
218 logging.info(f"Finished downloading MLST scheme and profile for {org}.")
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
219
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
220
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
221 if __name__ == "__main__":
9e8b1c747a6a planemo upload
galaxytrakr
parents:
diff changeset
222 main()