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
|
|
29 def download_from_GlimmerHMM(data_manager_dict, params, target_directory, sequence_id, sequence_name ):
|
|
30 GlimmerHMM_DOWNLOAD_URL = 'ftp://ccb.jhu.edu/pub/software/glimmerhmm/GlimmerHMM-3.0.4.tar.gz'
|
|
31 GlimmerHMM_TRAINED_DIR = os.path.join('GlimmerHMM', 'trained_dir', sequence_id)
|
|
32 with tarfile.open('GlimmerHMM-3.0.4.tar', mode='r:*') as tar:
|
|
33 subdir = [
|
|
34 tarinfo for tarinfo in tar.getmembers()
|
|
35 if sequence_id in tarinfo.name
|
|
36 ]
|
|
37 tar.extractall(members=subdir)
|
|
38 glimmerhmm_trained_target_dir = os.path.join(target_directory, sequence_id)
|
|
39 shutil.copytree(GlimmerHMM_TRAINED_DIR, glimmerhmm_trained_target_dir)
|
|
40 data_table_entry = dict(value=sequence_id, name=sequence_name, path=glimmerhmm_trained_target_dir)
|
|
41 _add_data_table_entry(data_manager_dict, data_table_entry)
|
|
42
|
|
43 cleanup_before_exit(GlimmerHMM_TRAINED_DIR)
|
|
44
|
|
45 def _add_data_table_entry( data_manager_dict, data_table_entry ):
|
|
46 data_manager_dict['data_tables'] = data_manager_dict.get( 'data_tables', {} )
|
|
47 data_manager_dict['data_tables']['reference_data'] = data_manager_dict['data_tables'].get('reference_data', [])
|
|
48 data_manager_dict['data_tables']['reference_data'].append( data_table_entry )
|
|
49 return data_manager_dict
|
|
50
|
|
51 REFERENCE_SOURCE_TO_DOWNLOAD = dict(glimmerhmm=download_from_GlimmerHMM)
|
|
52
|
|
53 def main():
|
|
54 #Parse Command Line
|
|
55 parser = argparse.ArgumentParser()
|
|
56 args = parser.parse_args()
|
|
57
|
|
58 filename = args[0]
|
|
59
|
|
60 params = from_json_string(open(filename).read())
|
|
61 target_directory = params['output_data'][0]['extra_files_path']
|
|
62 os.mkdir(target_directory)
|
|
63 data_manager_dict = {}
|
|
64
|
|
65 sequence_id, sequence_name = get_reference_id_name(params)
|
|
66
|
|
67 #Fetch the FASTA
|
|
68 REFERENCE_SOURCE_TO_DOWNLOAD[params['param_dict']['file_path']](data_manager_dict, params, target_directory, sequence_id, sequence_name)
|
|
69
|
|
70 #save info to json file
|
|
71 open(filename, 'wb').write(to_json_string(data_manager_dict))
|
|
72
|
|
73 if __name__ == "__main__":
|
|
74 main()
|
|
75
|