From 8b0c597bccf01d0000612f9cc55ab005f79f1c01 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Mon, 24 Oct 2022 14:59:33 +0200 Subject: [PATCH 1/2] Add test for ignored comments --- test/unit/tool_util/test_tool_linters.py | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/unit/tool_util/test_tool_linters.py b/test/unit/tool_util/test_tool_linters.py index a02d5351566..7923fc76215 100644 --- a/test/unit/tool_util/test_tool_linters.py +++ b/test/unit/tool_util/test_tool_linters.py @@ -5,6 +5,7 @@ import pytest from galaxy.tool_util.lint import ( lint_tool_source_with, + lint_xml_with, LintContext, XMLLintMessageLine, XMLLintMessageXPath, @@ -22,6 +23,7 @@ from galaxy.tool_util.linters import ( ) from galaxy.tool_util.loader_directory import load_tool_sources_from_path from galaxy.tool_util.parser.xml import XmlToolSource +from galaxy.util import parse_xml from galaxy.util.xml_macros import load_with_references # TODO tests tool xml for general linter @@ -755,6 +757,17 @@ XML_ORDER = """ """ +TOOL_WITH_COMMENTS = """ + + + + + + + + +""" + @pytest.fixture() def lint_ctx(): @@ -774,6 +787,15 @@ def get_xml_tool_source(xml_string): return load_with_references(tool_path)[0] +def get_tool_xml_exact(xml_string): + """Returns the tool XML as it is, without stripping comments or anything else.""" + with tempfile.NamedTemporaryFile(mode="w", suffix="tool.xml") as tmp: + tmp.write(xml_string) + tmp.flush() + tool_path = tmp.name + return parse_xml(tool_path, strip_whitespace=False, remove_comments=False) + + def failed_assert_print(lint_ctx): return ( f"Valid: {lint_ctx.valid_messages}\n" @@ -1716,3 +1738,10 @@ def test_linting_cwl_tool(lint_ctx): assert len(lint_ctx.valid_messages) == 4 assert len(lint_ctx.warn_messages) == 2 assert not lint_ctx.error_messages + + +def test_xml_comments_are_ignored(lint_ctx: LintContext): + tool_xml = get_tool_xml_exact(TOOL_WITH_COMMENTS) + lint_xml_with(lint_ctx, tool_xml) + for lint_message in lint_ctx.message_list: + assert "Comment" not in lint_message.message From defb32047f3da6236146c0793411750cbc72a5a1 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Mon, 24 Oct 2022 15:01:43 +0200 Subject: [PATCH 2/2] Fix skip XML comments when linting --- lib/galaxy/tool_util/linters/outputs.py | 7 ++++++- lib/galaxy/tool_util/linters/stdio.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/galaxy/tool_util/linters/outputs.py b/lib/galaxy/tool_util/linters/outputs.py index 87bacb3c77a..7d244d7a690 100644 --- a/lib/galaxy/tool_util/linters/outputs.py +++ b/lib/galaxy/tool_util/linters/outputs.py @@ -1,5 +1,8 @@ """This module contains a linting functions for tool outputs.""" -from galaxy.util import string_as_bool +from galaxy.util import ( + etree, + string_as_bool, +) from ._util import is_valid_cheetah_placeholder from ..parser.output_collection_def import NAMED_PATTERNS @@ -20,6 +23,8 @@ def lint_output(tool_xml, lint_ctx): labels = set() names = set() for output in list(outputs[0]): + if output.tag is etree.Comment: + continue if output.tag not in ["data", "collection"]: lint_ctx.warn(f"Unknown element found in outputs [{output.tag}]", node=output) continue diff --git a/lib/galaxy/tool_util/linters/stdio.py b/lib/galaxy/tool_util/linters/stdio.py index de769e824ed..981882bbde3 100644 --- a/lib/galaxy/tool_util/linters/stdio.py +++ b/lib/galaxy/tool_util/linters/stdio.py @@ -1,6 +1,7 @@ """This module contains a linting functions for tool error detection.""" import re +from galaxy.util import etree from .command import get_command @@ -37,6 +38,8 @@ def lint_stdio(tool_source, lint_ctx): stdio = stdios[0] for child in list(stdio): + if child.tag is etree.Comment: + continue if child.tag == "regex": _lint_regex(tool_xml, child, lint_ctx) elif child.tag == "exit_code":