Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.tool_util.linters.command
"""This module contains a linting function for a tool's command description.
A command description describes how to build the command-line to execute
from supplied inputs.
"""
[docs]def lint_command(tool_xml, lint_ctx):
"""Ensure tool contains exactly one command and check attributes."""
root = tool_xml.find("./command")
if root is None:
root = tool_xml.getroot()
commands = tool_xml.findall("./command")
if len(commands) > 1:
lint_ctx.error("More than one command tag found, behavior undefined.", node=commands[1])
return
if len(commands) == 0:
lint_ctx.error("No command tag found, must specify a command template to execute.", node=root)
return
command = get_command(tool_xml)
if command.text is None:
lint_ctx.error("Command is empty.", node=root)
elif "TODO" in command.text:
lint_ctx.warn("Command template contains TODO text.", node=command)
command_attrib = command.attrib
interpreter_type = None
for key, value in command_attrib.items():
if key == "interpreter":
interpreter_type = value
elif key == "detect_errors":
detect_errors = value
if detect_errors not in ["default", "exit_code", "aggressive"]:
lint_ctx.warn(f"Unknown detect_errors attribute [{detect_errors}]", node=command)
interpreter_info = ""
if interpreter_type:
interpreter_info = f" with interpreter of type [{interpreter_type}]"
if interpreter_type:
lint_ctx.warn("Command uses deprecated 'interpreter' attribute.", node=command)
lint_ctx.info(f"Tool contains a command{interpreter_info}.", node=command)
[docs]def get_command(tool_xml):
"""Get command XML element from supplied XML root."""
root = tool_xml.getroot()
commands = root.findall("command")
command = None
if len(commands) == 1:
command = commands[0]
return command