# HG changeset patch # User estrain # Date 1773344517 0 # Node ID 2986b488a62bd57d93c230e3126bcc7c69ba32e8 planemo upload commit 6f89f1ec5ad85eb9c08c0d48c77b8f8eadbdcaff diff -r 000000000000 -r 2986b488a62b data_manager/data_manager_amrfinderplus.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data_manager/data_manager_amrfinderplus.py Thu Mar 12 19:41:57 2026 +0000 @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +""" +Galaxy Data Manager for NCBI AMRFinderPlus database. +Downloads and indexes the AMRFinderPlus database using amrfinder_update. +Writes a Galaxy-compatible data table JSON. +""" + +import argparse +import json +import os +import shutil +import subprocess +from pathlib import Path + + +class AmrFinderPlusDataManager: + def __init__(self, json_path: str, db_name="amrfinderplus-db"): + self.json_path = Path(json_path) + self.db_name = db_name + self.output_dir = None + self.extra_files_path = None + self.version = None + self.dbformat = None + + # --- Galaxy I/O --------------------------------------------------------- + + def read_input_json(self): + """Read the input Galaxy data manager JSON.""" + with open(self.json_path) as fh: + params = json.load(fh) + + # Galaxy passes where we can write files (extra_files_path) + self.extra_files_path = Path(params["output_data"][0]["extra_files_path"]) + self.extra_files_path.mkdir(parents=True, exist_ok=True) + self.output_dir = self.extra_files_path / "tmp_download" + self.output_dir.mkdir(parents=True, exist_ok=True) + + def write_output_json(self): + """Write Galaxy data table JSON entry.""" + entry = { + "data_tables": { + "amrfinderplus_versioned_database": [ + { + "value": f"amrfinderplus_{self.version}_{self.dbformat}", + "name": f"{self.version} ({self.dbformat})", + "db_version": self.dbformat, + "path": self.db_name, + } + ] + } + } + + # Overwrite Galaxy's job JSON atomically and flush it + with open(self.json_path, "w") as fh: + json.dump(entry, fh, indent=2, sort_keys=True) + fh.flush() + os.fsync(fh.fileno()) + + # --- Database logic ----------------------------------------------------- + + def run_amrfinder_update(self): + """Run amrfinder_update to download the database.""" + print(f"Running amrfinder_update -d {self.output_dir}") + subprocess.run(["amrfinder_update", "-d", str(self.output_dir)], check=True) + + def read_versions(self): + """Read version.txt and database_format_version.txt.""" + latest_dir = self.output_dir / "latest" + with open(latest_dir / "version.txt") as f: + self.version = f.readline().strip() + with open(latest_dir / "database_format_version.txt") as f: + self.dbformat = f.readline().strip() + + def copy_database(self): + """Copy the downloaded database to a permanent location.""" + latest_dir = self.output_dir / "latest" + final_dir = self.extra_files_path / self.db_name + shutil.copytree(latest_dir, final_dir, dirs_exist_ok=True) + + def cleanup(self): + """Remove temporary download folder.""" + shutil.rmtree(self.output_dir, ignore_errors=True) + + # --- Main run ----------------------------------------------------------- + + def run(self): + try: + self.read_input_json() + self.run_amrfinder_update() + self.read_versions() + self.copy_database() + except Exception as e: + print(f"AMRFinderPlus Data Manager failed: {e}") + # still record placeholder entry + self.version = "unknown" + self.dbformat = "unknown" + finally: + self.cleanup() + self.write_output_json() + + +# --- CLI entrypoint -------------------------------------------------------- + +def parse_args(): + parser = argparse.ArgumentParser(description="Galaxy Data Manager for AMRFinderPlus database") + parser.add_argument("data_manager_json", help="Galaxy data manager input/output JSON file") + return parser.parse_args() + + +def main(): + args = parse_args() + mgr = AmrFinderPlusDataManager(args.data_manager_json) + mgr.run() + + +if __name__ == "__main__": + main() + diff -r 000000000000 -r 2986b488a62b data_manager/data_manager_amrfinderplus.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data_manager/data_manager_amrfinderplus.xml Thu Mar 12 19:41:57 2026 +0000 @@ -0,0 +1,23 @@ + + + ncbi-amrfinderplus + python + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 2986b488a62b data_manager_conf.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data_manager_conf.xml Thu Mar 12 19:41:57 2026 +0000 @@ -0,0 +1,28 @@ + + + + + + + + + + + ${path} + + amrfinderplus-db/${value} + + + + ${GALAXY_DATA_MANAGER_DATA_PATH}/amrfinderplus-db/${value} + + abspath + + + + + +