Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/galaxy/tool_util/parser/factory.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/galaxy/tool_util/parser/factory.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,74 @@ +"""Constructors for concrete tool and input source objects.""" + +import logging + +from galaxy.tool_util.loader import load_tool_with_refereces +from galaxy.util.yaml_util import ordered_load +from .cwl import CwlToolSource +from .interface import InputSource +from .xml import XmlInputSource, XmlToolSource +from .yaml import YamlInputSource, YamlToolSource +from ..fetcher import ToolLocationFetcher + +log = logging.getLogger(__name__) + + +def get_tool_source(config_file=None, xml_tree=None, enable_beta_formats=True, tool_location_fetcher=None, macro_paths=None): + """Return a ToolSource object corresponding to supplied source. + + The supplied source may be specified as a file path (using the config_file + parameter) or as an XML object loaded with load_tool_with_refereces. + """ + if xml_tree is not None: + return XmlToolSource(xml_tree, source_path=config_file, macro_paths=macro_paths) + elif config_file is None: + raise ValueError("get_tool_source called with invalid config_file None.") + + if tool_location_fetcher is None: + tool_location_fetcher = ToolLocationFetcher() + + config_file = tool_location_fetcher.to_tool_path(config_file) + if not enable_beta_formats: + tree, macro_paths = load_tool_with_refereces(config_file) + return XmlToolSource(tree, source_path=config_file, macro_paths=macro_paths) + + if config_file.endswith(".yml"): + log.info("Loading tool from YAML - this is experimental - tool will not function in future.") + with open(config_file) as f: + as_dict = ordered_load(f) + return YamlToolSource(as_dict, source_path=config_file) + elif config_file.endswith(".json") or config_file.endswith(".cwl"): + log.info("Loading CWL tool - this is experimental - tool likely will not function in future at least in same way.") + return CwlToolSource(config_file) + else: + tree, macro_paths = load_tool_with_refereces(config_file) + return XmlToolSource(tree, source_path=config_file, macro_paths=macro_paths) + + +def get_tool_source_from_representation(tool_format, tool_representation): + # TODO: make sure whatever is consuming this method uses ordered load. + log.info("Loading dynamic tool - this is experimental - tool may not function in future.") + if tool_format == "GalaxyTool": + if "version" not in tool_representation: + tool_representation["version"] = "1.0.0" # Don't require version for embedded tools. + return YamlToolSource(tool_representation) + else: + raise Exception("Unknown tool representation format [%s]." % tool_format) + + +def get_input_source(content): + """Wrap dicts or XML elements as InputSource if needed. + + If the supplied content is already an InputSource object, + it is simply returned. This allow Galaxy to uniformly + consume using the tool input source interface. + """ + if not isinstance(content, InputSource): + if isinstance(content, dict): + content = YamlInputSource(content) + else: + content = XmlInputSource(content) + return content + + +__all__ = ("get_tool_source", "get_input_source")