Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/planemo/tools.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/planemo/tools.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,96 @@ +"""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): + """Fetch URI to a local path.""" + fetcher = ToolLocationFetcher() + return fetcher.to_tool_path(uri) + + +def uris_to_paths(ctx, uris): + """Fetch multiple URIs to a local path.""" + 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): + """Walk paths and yield ToolSource objects discovered.""" + 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): + """Walk single path and yield ToolSource objects discovered.""" + 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): + """Generate a list for tool sources found down specified 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", +)