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.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)