Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/ephemeris/install_tool_deps.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 '''Tool to install tool dependencies on a Galaxy instance.''' | |
| 3 import argparse | |
| 4 import logging as log | |
| 5 import os | |
| 6 import xml.etree.ElementTree as ET | |
| 7 | |
| 8 import yaml | |
| 9 from bioblend import ConnectionError as ConnErr | |
| 10 from bioblend.galaxy.tools import ToolClient | |
| 11 | |
| 12 from ephemeris import get_galaxy_connection | |
| 13 from ephemeris.common_parser import get_common_args | |
| 14 | |
| 15 timeout_codes = (408, 502, 504) | |
| 16 | |
| 17 | |
| 18 def _parser(): | |
| 19 parent = get_common_args() | |
| 20 parser = argparse.ArgumentParser(parents=[parent]) | |
| 21 parser.add_argument("-t", "--tool", help='Path to a tool file, tool_conf file, or yaml file containing a sequence of tool ids', nargs='*') | |
| 22 parser.add_argument("-i", "--id", help='Space-separated list of tool ids', nargs='*') | |
| 23 | |
| 24 return parser | |
| 25 | |
| 26 | |
| 27 def _install(tool_client, tool_id): | |
| 28 try: | |
| 29 tool_client.install_dependencies(tool_id) | |
| 30 except ConnErr as e: | |
| 31 if e.status_code in timeout_codes: | |
| 32 log.warning(e.body) | |
| 33 else: | |
| 34 raise | |
| 35 | |
| 36 | |
| 37 def main(): | |
| 38 """ | |
| 39 This script uses bioblend to trigger dependencies installations for the provided tools | |
| 40 """ | |
| 41 args = _parser().parse_args() | |
| 42 gi = get_galaxy_connection(args) | |
| 43 tool_client = ToolClient(gi) | |
| 44 | |
| 45 if args.verbose: | |
| 46 log.basicConfig(level=log.DEBUG) | |
| 47 | |
| 48 if args.tool: | |
| 49 for tool_conf_path in args.tool: # type: str | |
| 50 _, ext = os.path.splitext(tool_conf_path) | |
| 51 if ext == '.xml': | |
| 52 log.info("tool_conf xml found, parsing..") | |
| 53 # install all | |
| 54 root = ET.ElementTree(file=tool_conf_path).getroot() | |
| 55 if root.tag == "toolbox": | |
| 56 # Install all from tool_conf | |
| 57 tool_path = root.get('tool_path', '') | |
| 58 tool_path = tool_path.replace('${tool_conf_dir}', os.path.abspath(os.path.dirname(tool_conf_path))) | |
| 59 if tool_path: | |
| 60 log.info("Searching for tools relative to " + tool_path) | |
| 61 tools = root.findall(".//tool[@file]") | |
| 62 if len(tools) == 0: | |
| 63 log.warning("No tools found in tool_conf") | |
| 64 continue | |
| 65 | |
| 66 for tool in tools: | |
| 67 tool_id = ET.ElementTree(file=os.path.join(tool_path, tool.get('file'))).getroot().get('id') | |
| 68 if tool_id: | |
| 69 log.info("Installing tool dependencies for " + tool_id + " from: " + tool.get('file')) | |
| 70 _install(tool_client, tool_id) | |
| 71 elif root.tag == "tool" and root.get('id'): | |
| 72 # Install from single tool file | |
| 73 log.info("Tool xml found. Installing " + root.get('id') + " dependencies..") | |
| 74 _install(tool_client, root.get('id')) | |
| 75 else: | |
| 76 log.info("YAML tool list found, parsing..") | |
| 77 with open(tool_conf_path) as fh: | |
| 78 tool_ids = yaml.safe_load(fh) | |
| 79 for tool_id in tool_ids: | |
| 80 # Install from yaml file | |
| 81 log.info("Installing " + tool_id + " dependencies..") | |
| 82 _install(tool_client, tool_id) | |
| 83 | |
| 84 if args.id: | |
| 85 for tool_id in args.id: # type: str | |
| 86 log.info("Installing " + tool_id + " dependencies..") | |
| 87 _install(tool_client, tool_id.strip()) | |
| 88 | |
| 89 | |
| 90 if __name__ == '__main__': | |
| 91 main() |
