Warning
This document is for an in-development version 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.xml_order
"""This module contains a linting functions for tool XML block order.
For more information on the IUC standard for XML block order see -
https://github.com/galaxy-iuc/standards.
"""
# https://github.com/galaxy-iuc/standards
# https://github.com/galaxy-iuc/standards/pull/7/files
TAG_ORDER = [
"description",
"macros",
"edam_topics",
"edam_operations",
"xrefs",
"parallelism",
"requirements",
"required_files",
"code",
"stdio",
"version_command",
"command",
"environment_variables",
"configfiles",
"inputs",
"outputs",
"tests",
"help",
"citations",
]
DATASOURCE_TAG_ORDER = [
"description",
"macros",
"command",
"configfiles",
"inputs",
"request_param_translation",
"uihints",
"outputs",
"options",
"help",
"citations",
]
# Ensure the XML blocks appear in the correct order prescribed
# by the tool author best practices.
[docs]def lint_xml_order(tool_xml, lint_ctx):
tool_root = tool_xml.getroot()
if tool_root.attrib.get("tool_type", "") == "data_source":
tag_ordering = DATASOURCE_TAG_ORDER
else:
tag_ordering = TAG_ORDER
last_tag = None
last_key = None
for elem in tool_root:
tag = elem.tag
if tag in tag_ordering:
key = tag_ordering.index(tag)
if last_key:
if last_key > key:
lint_ctx.warn(
f"Best practice violation [{tag}] elements should come before [{last_tag}]", node=elem
)
last_tag = tag
last_key = key
else:
lint_ctx.info(f"Unknown tag [{tag}] encountered, this may result in a warning in the future.", node=elem)