comparison env/lib/python3.9/site-packages/planemo/tool_lint.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 from __future__ import absolute_import
2
3 from os.path import basename
4
5 from galaxy.tool_util.lint import lint_tool_source
6
7 import planemo.linters.biocontainer_registered
8 import planemo.linters.conda_requirements
9 import planemo.linters.doi
10 import planemo.linters.urls
11 import planemo.linters.xsd
12 from planemo.exit_codes import (
13 EXIT_CODE_GENERIC_FAILURE,
14 EXIT_CODE_OK,
15 )
16 from planemo.io import (
17 coalesce_return_codes,
18 error,
19 info,
20 )
21 from planemo.lint import build_lint_args
22 from planemo.tools import (
23 is_tool_load_error,
24 yield_tool_sources_on_paths,
25 )
26
27 LINTING_TOOL_MESSAGE = "Linting tool %s"
28
29
30 def build_tool_lint_args(ctx, **kwds):
31 lint_args = build_lint_args(ctx, **kwds)
32 extra_modules = _lint_extra_modules(**kwds)
33 lint_args["extra_modules"] = extra_modules
34 return lint_args
35
36
37 def lint_tools_on_path(ctx, paths, lint_args, **kwds):
38 assert_tools = kwds.get("assert_tools", True)
39 recursive = kwds.get("recursive", False)
40 exit_codes = []
41 for (tool_path, tool_xml) in yield_tool_sources_on_paths(ctx, paths, recursive):
42 if handle_tool_load_error(tool_path, tool_xml):
43 exit_codes.append(EXIT_CODE_GENERIC_FAILURE)
44 continue
45 info("Linting tool %s" % tool_path)
46 if not lint_tool_source(tool_xml, name=basename(tool_path), **lint_args):
47 error("Failed linting")
48 exit_codes.append(EXIT_CODE_GENERIC_FAILURE)
49 else:
50 exit_codes.append(EXIT_CODE_OK)
51 return coalesce_return_codes(exit_codes, assert_at_least_one=assert_tools)
52
53
54 def _lint_extra_modules(**kwds):
55 linters = []
56 if kwds.get("xsd", True):
57 linters.append(planemo.linters.xsd)
58
59 if kwds.get("doi", False):
60 linters.append(planemo.linters.doi)
61
62 if kwds.get("urls", False):
63 linters.append(planemo.linters.urls)
64
65 if kwds.get("conda_requirements", False):
66 linters.append(planemo.linters.conda_requirements)
67
68 if kwds.get("biocontainer", False):
69 linters.append(planemo.linters.biocontainer_registered)
70
71 return linters
72
73
74 def handle_tool_load_error(tool_path, tool_xml):
75 """ Return True if tool_xml is tool load error (invalid XML), and
76 print a helpful error message.
77 """
78 is_error = False
79 if is_tool_load_error(tool_xml):
80 info("Could not lint %s due to malformed xml." % tool_path)
81 is_error = True
82 return is_error