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