Source code for planemo.tool_lint

from os.path import basename

from galaxy.tool_util.lint import lint_tool_source

import planemo.linters.biocontainer_registered
import planemo.linters.conda_requirements
import planemo.linters.doi
import planemo.linters.urls
import planemo.linters.xsd
from planemo.exit_codes import (
    EXIT_CODE_GENERIC_FAILURE,
    EXIT_CODE_OK,
)
from planemo.io import (
    coalesce_return_codes,
    error,
    info,
)
from planemo.lint import build_lint_args
from planemo.tools import (
    is_tool_load_error,
    yield_tool_sources_on_paths,
)

LINTING_TOOL_MESSAGE = "Linting tool %s"


[docs]def build_tool_lint_args(ctx, **kwds): lint_args = build_lint_args(ctx, **kwds) extra_modules = _lint_extra_modules(**kwds) lint_args["extra_modules"] = extra_modules return lint_args
[docs]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 _lint_extra_modules(**kwds): linters = [] if kwds.get("xsd", True): linters.append(planemo.linters.xsd) if kwds.get("doi", False): linters.append(planemo.linters.doi) if kwds.get("urls", False): linters.append(planemo.linters.urls) if kwds.get("conda_requirements", False): linters.append(planemo.linters.conda_requirements) if kwds.get("biocontainer", False): linters.append(planemo.linters.biocontainer_registered) return linters
[docs]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