Skip to content

Commit a8eb1f1

Browse files
committed
Option to test tools on update/install for Galaxy 18.05.
1 parent e818203 commit a8eb1f1

3 files changed

Lines changed: 295 additions & 78 deletions

File tree

ephemeris/get_tool_list_from_galaxy.py

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,47 @@
1313
from .common_parser import get_common_args
1414

1515

16+
def get_tool_panel(gi):
17+
tool_client = ToolClient(gi)
18+
return tool_client.get_tool_panel()
19+
20+
21+
def tools_for_repository(gi, repository):
22+
tool_shed_url = repository.get('tool_shed_url')
23+
name = repository['name']
24+
owner = repository['owner']
25+
changeset_revision = repository.get('changeset_revision')
26+
27+
tools = []
28+
29+
def handle_tool(tool_elem):
30+
if not tool_elem.get('tool_shed_repository', None):
31+
return
32+
tsr = tool_elem['tool_shed_repository']
33+
if tsr['name'] != name or tsr['owner'] != owner:
34+
return
35+
36+
if tool_shed_url and tsr['tool_shed'] != tool_shed_url:
37+
return
38+
39+
if changeset_revision and changeset_revision != tsr["changeset_revision"]:
40+
return
41+
42+
tools.append(tool_elem)
43+
44+
walk_tools(get_tool_panel(gi), handle_tool)
45+
46+
return tools
47+
48+
49+
def walk_tools(tool_panel, f):
50+
for elem in tool_panel:
51+
if elem['model_class'] == 'Tool':
52+
f(elem)
53+
elif elem['model_class'] == 'ToolSection':
54+
walk_tools(elem.get("elems", []), f)
55+
56+
1657
class GiToToolYaml:
1758
def __init__(self, gi,
1859
include_tool_panel_section_id=False,
@@ -34,8 +75,7 @@ def toolbox(self):
3475
"""
3576
Gets the toolbox elements from <galaxy_url>/api/tools
3677
"""
37-
tool_client = ToolClient(self.gi)
38-
return tool_client.get_tool_panel()
78+
return get_tool_panel(self.gi)
3979

4080
@property
4181
def installed_tool_list(self):
@@ -52,15 +92,14 @@ def get_repositories(self):
5292
Parse these accordingly to get a list of repositories.
5393
"""
5494
repositories = []
55-
for elem in self.toolbox:
56-
if elem['model_class'] == 'Tool':
57-
repo = get_repo_from_tool(elem)
58-
if repo:
59-
repositories.append(repo)
60-
elif elem['model_class'] == 'ToolSection':
61-
new_repos = get_repos_from_section(elem)
62-
if new_repos:
63-
repositories.extend(new_repos)
95+
96+
def record_repo(tool_elem):
97+
repo = get_repo_from_tool(tool_elem)
98+
if repo:
99+
repositories.append(repo)
100+
101+
walk_tools(self.toolbox, record_repo)
102+
64103
if self.get_data_managers:
65104
for tool in self.installed_tool_list:
66105
if tool.get("model_class") == 'DataManagerTool':
@@ -156,20 +195,6 @@ def get_repo_from_tool(tool):
156195
return repo
157196

158197

159-
def get_repos_from_section(section):
160-
repos = []
161-
for elem in section['elems']:
162-
if elem['model_class'] == 'Tool':
163-
repo = get_repo_from_tool(elem)
164-
if repo:
165-
repos.append(repo)
166-
elif elem['model_class'] == 'ToolSection':
167-
new_repos = get_repos_from_section(elem)
168-
if new_repos:
169-
repos.extend(new_repos)
170-
return repos
171-
172-
173198
def _parse_cli_options():
174199
"""
175200
Parse command line options, returning `parse_args` from `ArgumentParser`.

0 commit comments

Comments
 (0)