comparison data_manager/amrfinderplus_data_manager.py @ 2:f1ec3a39ffec draft default tip

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