comparison data_manager/data_manager_amrfinderplus.py @ 0:8e1bbef44e19 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_amrfinderplus commit a7bd2bf9c3e46c3524ee640bb60c8062b3257217-dirty
author pimarin
date Thu, 10 Nov 2022 15:10:15 +0000
parents
children 254479b50f86
comparison
equal deleted inserted replaced
-1:000000000000 0:8e1bbef44e19
1 import argparse
2 import json
3 import os
4 import re
5 from datetime import datetime
6 from pathlib import Path
7 import subprocess as sp
8
9
10 class GetDataManager:
11
12 def __init__(self):
13 self.data_table_name = "amrfinderplus_database"
14 self._db_name = "amrfinderplus-db"
15 self._db_path = Path().absolute()
16 self._today = datetime.now().strftime("%Y-%m-%d_%H:%M")
17
18 def get_data_table_format(self):
19 """
20 Skeleton of a data_table format
21 return: a data table formatted for json output
22 """
23 self.data_table_entry = {
24 "data_tables": {
25 self.data_table_name: {}
26 }
27 }
28 return self.data_table_entry
29
30 def get_data_manager(self, amrfinderplus_version):
31 self.amrfinderplus_table_list = self.get_data_table_format()
32
33 data_info = dict(value=self._today,
34 name=amrfinderplus_version,
35 path=self._db_name)
36 self.amrfinderplus_table_list["data_tables"][self.data_table_name] = [data_info]
37 return self.amrfinderplus_table_list
38
39 def update_amrfinderplus_db(self, path):
40 amrfinderplus_db_path = path.joinpath(self._db_name)
41 cmd = [
42 'amrfinder_update',
43 '--database', str(amrfinderplus_db_path),
44 '--force_update'
45 ]
46 print('cmd=%s', cmd)
47 proc = sp.run(
48 cmd,
49 stdout=sp.PIPE,
50 stderr=sp.PIPE,
51 universal_newlines=True
52 )
53 if(proc.returncode != 0):
54 print(f"ERROR: AMRFinderPlus failed! command: 'amrfinder_update --force_update --database {amrfinderplus_db_path}', error code: {proc.returncode}")
55 else:
56 return amrfinderplus_db_path
57
58 def get_amrfinderplus_version(self, amrfinderplus_path):
59 version_file = Path(f'{amrfinderplus_path}/latest/version.txt')
60 with open(version_file, "r") as version:
61 version_value = version.read()
62 version_value = re.sub("\n", "", version_value)
63 return version_value
64
65 def parse_arguments(self):
66 # parse options and arguments
67 arg_parser = argparse.ArgumentParser()
68 arg_parser.add_argument("data_manager_json")
69 arg_parser.add_argument("-t", "--test", action='store_true',
70 help="option to test the script with an lighted database")
71 return arg_parser.parse_args()
72
73 def read_json_input_file(self, json_file_path):
74 with open(json_file_path) as fh:
75 params = json.load(fh)
76 target_dir = params['output_data'][0]['extra_files_path']
77 os.makedirs(target_dir)
78 return target_dir
79
80 def write_json_infos(self, json_file_path, data_manager_infos):
81 with open(json_file_path, 'w') as fh:
82 json.dump(data_manager_infos, fh, sort_keys=True)
83
84
85 def main():
86 # init the class
87 amrfinderplus_download = GetDataManager()
88 # import the arguments
89 all_args = amrfinderplus_download.parse_arguments()
90 # read the json input from galaxy to define the db path
91 path_to_download = amrfinderplus_download.read_json_input_file(json_file_path=all_args.data_manager_json)
92 # change the path to th json information
93 amrfinderplus_download._db_path = path_to_download
94 # download the last amrfinderplus database
95 amrfinder_output = amrfinderplus_download.update_amrfinderplus_db(amrfinderplus_download._db_path)
96 # extract the version number of the database
97 amrfinder_version = amrfinderplus_download.get_amrfinderplus_version(amrfinder_output)
98 # make a dic with database information
99 amrfinderplus_json_output = amrfinderplus_download.get_data_manager(amrfinder_version)
100 amrfinderplus_download.write_json_infos(json_file_path=all_args.data_manager_json,
101 data_manager_infos=amrfinderplus_json_output)
102
103
104 if __name__ == '__main__':
105 main()