diff env/lib/python3.7/site-packages/planemo/tool_lint.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/planemo/tool_lint.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,49 @@
+from __future__ import absolute_import
+
+from os.path import basename
+
+from galaxy.tool_util.lint import lint_tool_source
+
+from planemo.exit_codes import (
+    EXIT_CODE_GENERIC_FAILURE,
+    EXIT_CODE_OK,
+)
+from planemo.io import (
+    coalesce_return_codes,
+    error,
+    info,
+)
+from planemo.tools import (
+    is_tool_load_error,
+    yield_tool_sources_on_paths,
+)
+
+LINTING_TOOL_MESSAGE = "Linting tool %s"
+
+
+def lint_tools_on_path(ctx, paths, lint_args, **kwds):
+    assert_tools = kwds.get("assert_tools", True)
+    recursive = kwds.get("recursive", False)
+    exit_codes = []
+    for (tool_path, tool_xml) in yield_tool_sources_on_paths(ctx, paths, recursive):
+        if handle_tool_load_error(tool_path, tool_xml):
+            exit_codes.append(EXIT_CODE_GENERIC_FAILURE)
+            continue
+        info("Linting tool %s" % tool_path)
+        if not lint_tool_source(tool_xml, name=basename(tool_path), **lint_args):
+            error("Failed linting")
+            exit_codes.append(EXIT_CODE_GENERIC_FAILURE)
+        else:
+            exit_codes.append(EXIT_CODE_OK)
+    return coalesce_return_codes(exit_codes, assert_at_least_one=assert_tools)
+
+
+def handle_tool_load_error(tool_path, tool_xml):
+    """ Return True if tool_xml is tool load error (invalid XML), and
+    print a helpful error message.
+    """
+    is_error = False
+    if is_tool_load_error(tool_xml):
+        info("Could not lint %s due to malformed xml." % tool_path)
+        is_error = True
+    return is_error