Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/planemo/tools.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/planemo/tools.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,92 @@ +"""Planemo-specific wrappers around galaxy-tool-util tool functionality.""" +from __future__ import absolute_import + +import os +import sys +import traceback + +from galaxy.tool_util import loader_directory +from galaxy.tool_util.fetcher import ToolLocationFetcher + +from planemo.io import error, info + +is_tool_load_error = loader_directory.is_tool_load_error +SKIP_XML_MESSAGE = "Skipping XML file - does not appear to be a tool %s." +SHED_FILES = ["tool_dependencies.xml", "repository_dependencies.xml"] +LOAD_ERROR_MESSAGE = "Error loading tool with path %s" + + +def uri_to_path(ctx, uri): + fetcher = ToolLocationFetcher() + return fetcher.to_tool_path(uri) + + +def uris_to_paths(ctx, uris): + fetcher = ToolLocationFetcher() + paths = [] + for uri in uris: + path = fetcher.to_tool_path(uri) + paths.append(path) + return paths + + +def yield_tool_sources_on_paths(ctx, paths, recursive=False, yield_load_errors=True, exclude_deprecated=False): + for path in paths: + for (tool_path, tool_source) in yield_tool_sources(ctx, path, recursive, yield_load_errors): + if exclude_deprecated and 'deprecated' in tool_path: + continue + yield (tool_path, tool_source) + + +def yield_tool_sources(ctx, path, recursive=False, yield_load_errors=True): + tools = load_tool_sources_from_path( + path, + recursive, + register_load_errors=True, + ) + for (tool_path, tool_source) in tools: + if is_tool_load_error(tool_source): + if yield_load_errors: + yield (tool_path, tool_source) + else: + error(LOAD_ERROR_MESSAGE % tool_path) + continue + + if not _is_tool_source(ctx, tool_path, tool_source): + continue + yield (tool_path, tool_source) + + +def load_tool_sources_from_path(path, recursive, register_load_errors=False): + """Generator for tool sources on a path.""" + return loader_directory.load_tool_sources_from_path( + path, + _load_exception_handler, + recursive=recursive, + register_load_errors=register_load_errors, + ) + + +def _load_exception_handler(path, exc_info): + error(LOAD_ERROR_MESSAGE % path) + traceback.print_exception(*exc_info, limit=1, file=sys.stderr) + + +def _is_tool_source(ctx, tool_path, tool_source): + if os.path.basename(tool_path) in SHED_FILES: + return False + root = getattr(tool_source, "root", None) + if root is not None: + if root.tag != "tool": + if ctx.verbose: + info(SKIP_XML_MESSAGE % tool_path) + return False + return True + + +__all__ = ( + "is_tool_load_error", + "load_tool_sources_from_path", + "yield_tool_sources", + "yield_tool_sources_on_paths", +)