comparison env/lib/python3.9/site-packages/galaxy/tool_util/linters/general.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 """This module contains a linting functions for general aspects of the tool."""
2 import re
3
4 import packaging.version
5
6 ERROR_VERSION_MSG = "Tool version is missing or empty."
7 WARN_VERSION_MSG = "Tool version [%s] is not compliant with PEP 440."
8 VALID_VERSION_MSG = "Tool defines a version [%s]."
9
10 ERROR_NAME_MSG = "Tool name is missing or empty."
11 VALID_NAME_MSG = "Tool defines a name [%s]."
12
13 ERROR_ID_MSG = "Tool does not define an id attribute."
14 VALID_ID_MSG = "Tool defines an id [%s]."
15
16 PROFILE_PATTERN = re.compile(r"^[1,2]\d\.[0,1]\d$")
17 PROFILE_INFO_DEFAULT_MSG = "Tool targets 16.01 Galaxy profile."
18 PROFILE_INFO_SPECIFIED_MSG = "Tool specifies profile version [%s]."
19 PROFILE_INVALID_MSG = "Tool specifies an invalid profile version [%s]."
20
21 lint_tool_types = ["*"]
22
23
24 def lint_general(tool_source, lint_ctx):
25 """Check tool version, name, and id."""
26 version = tool_source.parse_version() or ''
27 parsed_version = packaging.version.parse(version)
28 if not version:
29 lint_ctx.error(ERROR_VERSION_MSG)
30 elif isinstance(parsed_version, packaging.version.LegacyVersion):
31 lint_ctx.warn(WARN_VERSION_MSG % version)
32 else:
33 lint_ctx.valid(VALID_VERSION_MSG % version)
34
35 name = tool_source.parse_name()
36 if not name:
37 lint_ctx.error(ERROR_NAME_MSG)
38 else:
39 lint_ctx.valid(VALID_NAME_MSG % name)
40
41 tool_id = tool_source.parse_id()
42 if not tool_id:
43 lint_ctx.error(ERROR_ID_MSG)
44 else:
45 lint_ctx.valid(VALID_ID_MSG % tool_id)
46
47 profile = tool_source.parse_profile()
48 profile_valid = PROFILE_PATTERN.match(profile) is not None
49 if not profile_valid:
50 lint_ctx.warn(PROFILE_INVALID_MSG)
51 elif profile == "16.01":
52 lint_ctx.valid(PROFILE_INFO_DEFAULT_MSG)
53 else:
54 lint_ctx.valid(PROFILE_INFO_SPECIFIED_MSG % profile)
55
56 if re.search(r"\s", tool_id):
57 lint_ctx.warn("Tool id contains a space - this is discouraged.")