Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/planemo/tools.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 """Planemo-specific wrappers around galaxy-tool-util tool functionality.""" | |
2 from __future__ import absolute_import | |
3 | |
4 import os | |
5 import sys | |
6 import traceback | |
7 | |
8 from galaxy.tool_util import loader_directory | |
9 from galaxy.tool_util.fetcher import ToolLocationFetcher | |
10 | |
11 from planemo.io import error, info | |
12 | |
13 is_tool_load_error = loader_directory.is_tool_load_error | |
14 SKIP_XML_MESSAGE = "Skipping XML file - does not appear to be a tool %s." | |
15 SHED_FILES = ["tool_dependencies.xml", "repository_dependencies.xml"] | |
16 LOAD_ERROR_MESSAGE = "Error loading tool with path %s" | |
17 | |
18 | |
19 def uri_to_path(ctx, uri): | |
20 fetcher = ToolLocationFetcher() | |
21 return fetcher.to_tool_path(uri) | |
22 | |
23 | |
24 def uris_to_paths(ctx, uris): | |
25 fetcher = ToolLocationFetcher() | |
26 paths = [] | |
27 for uri in uris: | |
28 path = fetcher.to_tool_path(uri) | |
29 paths.append(path) | |
30 return paths | |
31 | |
32 | |
33 def yield_tool_sources_on_paths(ctx, paths, recursive=False, yield_load_errors=True, exclude_deprecated=False): | |
34 for path in paths: | |
35 for (tool_path, tool_source) in yield_tool_sources(ctx, path, recursive, yield_load_errors): | |
36 if exclude_deprecated and 'deprecated' in tool_path: | |
37 continue | |
38 yield (tool_path, tool_source) | |
39 | |
40 | |
41 def yield_tool_sources(ctx, path, recursive=False, yield_load_errors=True): | |
42 tools = load_tool_sources_from_path( | |
43 path, | |
44 recursive, | |
45 register_load_errors=True, | |
46 ) | |
47 for (tool_path, tool_source) in tools: | |
48 if is_tool_load_error(tool_source): | |
49 if yield_load_errors: | |
50 yield (tool_path, tool_source) | |
51 else: | |
52 error(LOAD_ERROR_MESSAGE % tool_path) | |
53 continue | |
54 | |
55 if not _is_tool_source(ctx, tool_path, tool_source): | |
56 continue | |
57 yield (tool_path, tool_source) | |
58 | |
59 | |
60 def load_tool_sources_from_path(path, recursive, register_load_errors=False): | |
61 """Generator for tool sources on a path.""" | |
62 return loader_directory.load_tool_sources_from_path( | |
63 path, | |
64 _load_exception_handler, | |
65 recursive=recursive, | |
66 register_load_errors=register_load_errors, | |
67 ) | |
68 | |
69 | |
70 def _load_exception_handler(path, exc_info): | |
71 error(LOAD_ERROR_MESSAGE % path) | |
72 traceback.print_exception(*exc_info, limit=1, file=sys.stderr) | |
73 | |
74 | |
75 def _is_tool_source(ctx, tool_path, tool_source): | |
76 if os.path.basename(tool_path) in SHED_FILES: | |
77 return False | |
78 root = getattr(tool_source, "root", None) | |
79 if root is not None: | |
80 if root.tag != "tool": | |
81 if ctx.verbose: | |
82 info(SKIP_XML_MESSAGE % tool_path) | |
83 return False | |
84 return True | |
85 | |
86 | |
87 __all__ = ( | |
88 "is_tool_load_error", | |
89 "load_tool_sources_from_path", | |
90 "yield_tool_sources", | |
91 "yield_tool_sources_on_paths", | |
92 ) |