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',
    'parallelism',
    'requirements',
    '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': _validate_for_tags(tool_root, lint_ctx, DATASOURCE_TAG_ORDER) else: _validate_for_tags(tool_root, lint_ctx, TAG_ORDER)
def _validate_for_tags(root, lint_ctx, tag_ordering): last_tag = None last_key = None for elem in 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}]") last_tag = tag last_key = key else: lint_ctx.info("Unknown tag [%s] encountered, this may result in a warning in the future." % tag)