Mercurial > repos > pimarin > data_manager_amrfinderplus
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() |
