1
|
1 #!/usr/bin/env python
|
|
2 # ref: https://galaxyproject.org/admin/tools/data-managers/how-to/define/
|
|
3
|
|
4 import sys
|
|
5 import os
|
|
6 import tempfile
|
|
7 import shutil
|
|
8 import argparse
|
|
9 import urllib2
|
|
10 import tarfile
|
|
11
|
|
12 from galaxy.util.json import from_json_string, to_json_string
|
|
13
|
|
14
|
|
15 def cleanup_before_exit(tmp_dir):
|
|
16 if tmp_dir and os.path.exists(tmp_dir):
|
|
17 shutil.rmtree(tmp_dir)
|
|
18
|
|
19 def stop_err(msg):
|
|
20 sys.stderr.write(msg)
|
|
21 sys.exit(1)
|
|
22
|
|
23 def get_reference_id_name(params):
|
|
24 genome_id = params['param_dict']['genome_id']
|
|
25 genome_name = params['param_dict']['genome_name']
|
|
26 return genome_id, genome_name
|
|
27
|
5
|
28 def get_url(params):
|
|
29 trained_url = params['param_dict']['trained_url']
|
|
30 return trained_url
|
|
31
|
|
32 def download_from_GlimmerHMM(data_manager_dict, target_directory, sequence_id, sequence_name, trained_dir):
|
|
33 if not trained_dir:
|
|
34 trained_dir = 'ftp://ccb.jhu.edu/pub/software/glimmerhmm/GlimmerHMM-3.0.4.tar.gz'
|
|
35 #Download trained data, ref: https://dzone.com/articles/how-download-file-python
|
|
36 f = urllib2.urlopen(trained_dir)
|
|
37 data = f.read()
|
|
38 downloadpath = 'tmp'
|
|
39 os.mkdir(downloadpath)
|
|
40 filepath = os.path.join(downloadpath, 'GlimmerHMM-3.0.4.tar')
|
|
41 with open(filepath, 'wb') as code:
|
|
42 code.write(data)
|
|
43 with tarfile.open(filepath, mode='r:*') as tar:
|
1
|
44 subdir = [
|
|
45 tarinfo for tarinfo in tar.getmembers()
|
|
46 if sequence_id in tarinfo.name
|
|
47 ]
|
6
|
48 tar.extractall(path=downloadpath, members=subdir)
|
|
49 glimmerhmm_trained_dir = os.path.join(downloadpath, 'GlimmerHMM', 'trained_dir', sequence_id)
|
1
|
50 glimmerhmm_trained_target_dir = os.path.join(target_directory, sequence_id)
|
6
|
51 shutil.copytree(glimmerhmm_trained_dir, glimmerhmm_trained_target_dir)
|
11
|
52 data_table_entry = dict(value=sequence_id, name=sequence_name, path=glimmerhmm_trained_target_dir)
|
1
|
53 _add_data_table_entry(data_manager_dict, data_table_entry)
|
5
|
54
|
|
55 cleanup_before_exit('tmp')
|
1
|
56
|
5
|
57 def _add_data_table_entry(data_manager_dict, data_table_entry):
|
11
|
58 data_manager_dict['data_tables'] = data_manager_dict.get('data_tables', {})
|
7
|
59 data_manager_dict['data_tables']['glimmer_hmm_trained_dir'] = data_manager_dict['data_tables'].get('glimmer_hmm_trained_dir', [])
|
|
60 data_manager_dict['data_tables']['glimmer_hmm_trained_dir'].append(data_table_entry)
|
1
|
61 return data_manager_dict
|
|
62
|
|
63 def main():
|
|
64 #Parse Command Line
|
|
65 parser = argparse.ArgumentParser()
|
3
|
66 parser.add_argument('-o', '--out', help='Output file')
|
1
|
67 args = parser.parse_args()
|
|
68
|
3
|
69 filename = args.out
|
1
|
70
|
|
71 params = from_json_string(open(filename).read())
|
10
|
72 target_directory = params['output_data'][0]['extra_files_path']
|
1
|
73 os.mkdir(target_directory)
|
|
74 data_manager_dict = {}
|
|
75
|
|
76 sequence_id, sequence_name = get_reference_id_name(params)
|
5
|
77 trained_dir = get_url(params)
|
1
|
78 #Fetch the FASTA
|
5
|
79 download_from_GlimmerHMM(data_manager_dict, target_directory, sequence_id, sequence_name, trained_dir)
|
1
|
80 #save info to json file
|
|
81 open(filename, 'wb').write(to_json_string(data_manager_dict))
|
|
82
|
|
83 if __name__ == "__main__":
|
|
84 main()
|
|
85
|