Source code for galaxy.tool_util.linters.command

"""This module contains linters for a tool's command description.

A command description describes how to build the command-line to execute
from supplied inputs.
"""

from typing import TYPE_CHECKING

from galaxy.tool_util.lint import Linter

if TYPE_CHECKING:
    from galaxy.tool_util.lint import LintContext
    from galaxy.tool_util.parser.interface import ToolSource


[docs]class CommandMissing(Linter):
[docs] @classmethod def lint(cls, tool_source: "ToolSource", lint_ctx: "LintContext"): tool_xml = getattr(tool_source, "xml_tree", None) if not tool_xml: return root = tool_xml.find("./command") if root is None: root = tool_xml.getroot() command = tool_xml.find("./command") if command is None: lint_ctx.error( "No command tag found, must specify a command template to execute.", linter=cls.name(), node=root )
[docs]class CommandEmpty(Linter):
[docs] @classmethod def lint(cls, tool_source: "ToolSource", lint_ctx: "LintContext"): tool_xml = getattr(tool_source, "xml_tree", None) if not tool_xml: return root = tool_xml.find("./command") if root is None: root = tool_xml.getroot() command = tool_xml.find("./command") if command is not None and command.text is None: lint_ctx.error("Command is empty.", linter=cls.name(), node=root)
[docs]class CommandTODO(Linter):
[docs] @classmethod def lint(cls, tool_source: "ToolSource", lint_ctx: "LintContext"): tool_xml = getattr(tool_source, "xml_tree", None) if not tool_xml: return command = tool_xml.find("./command") if command is not None and command.text is not None and "TODO" in command.text: lint_ctx.warn("Command template contains TODO text.", linter=cls.name(), node=command)
[docs]class CommandInterpreterDeprecated(Linter):
[docs] @classmethod def lint(cls, tool_source: "ToolSource", lint_ctx: "LintContext"): tool_xml = getattr(tool_source, "xml_tree", None) if not tool_xml: return command = tool_xml.find("./command") if command is None: return interpreter_type = command.attrib.get("interpreter", None) if interpreter_type is not None: lint_ctx.warn("Command uses deprecated 'interpreter' attribute.", linter=cls.name(), node=command)
[docs]class CommandInfo(Linter):
[docs] @classmethod def lint(cls, tool_source: "ToolSource", lint_ctx: "LintContext"): tool_xml = getattr(tool_source, "xml_tree", None) if not tool_xml: return command = tool_xml.find("./command") if command is None: return interpreter_type = command.attrib.get("interpreter", None) interpreter_info = "" if interpreter_type: interpreter_info = f" with interpreter of type [{interpreter_type}]" lint_ctx.info(f"Tool contains a command{interpreter_info}.", linter=cls.name(), node=command)