Skip to content

Commit

Permalink
Add dependency_resolvers/clean endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mvdbeek committed Nov 29, 2016
1 parent 045a2f0 commit 16b49d9
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/galaxy/tools/deps/resolvers/conda.py
Expand Up @@ -11,6 +11,7 @@
from ..conda_util import (
build_isolated_environment,
cleanup_failed_install,
exec_clean,
CondaContext,
CondaTarget,
install_conda,
Expand Down Expand Up @@ -98,6 +99,9 @@ def get_option(name):
self.auto_install = auto_install
self.copy_dependencies = copy_dependencies

def clean(self, **kwds):
return exec_clean()

def resolve(self, name, version, type, **kwds):
# Check for conda just not being there, this way we can enable
# conda by default and just do nothing in not configured.
Expand Down
14 changes: 14 additions & 0 deletions lib/galaxy/tools/deps/views.py
Expand Up @@ -125,5 +125,19 @@ def installable_resolvers(self):
"""
return [index for index, resolver in enumerate(self._dependency_resolvers) if hasattr(resolver, "install_dependency") and not resolver.disabled ]


def get_requirements_status(self, requested_requirements, installed_tool_dependencies=None):
return [self.manager_dependency(installed_tool_dependencies=installed_tool_dependencies, **req) for req in requested_requirements]

def clean(self, index=None, **kwds):
if index:
resolver = self._dependency_resolver(index)
if not hasattr(resolver, "clean"):
raise NotImplemented()
else:
resolver.clean()
return "OK"
else:
[resolver.clean(**kwds) for resolver in self._dependency_resolvers if hasattr(resolver, 'clean')]
return "OK"

19 changes: 19 additions & 0 deletions lib/galaxy/webapps/galaxy/api/tool_dependencies.py
Expand Up @@ -162,3 +162,22 @@ def manager_requirements(self, trans, **kwds):
the corresponding resolver (keyed on 'index').
"""
return self._view.manager_requirements()

@expose_api
@require_admin
def clean(self, trans, id=None, **kwds):
"""
POST /api/dependencies_resolver/clean
Cleans up intermediate files created by resolvers during the dependency
installation.
:type index: int
:param index: index of the dependency resolver
:rtype: dict
:returns: a dictified description of the requirement that could
be resolved (keyed on 'requirement') and the index of
the corresponding resolver (keyed on 'index').
"""
return self._view.clean(id, **kwds)
1 change: 1 addition & 0 deletions lib/galaxy/webapps/galaxy/buildapp.py
Expand Up @@ -270,6 +270,7 @@ def populate_api_routes( webapp, app ):
webapp.mapper.connect( '/api/dependency_resolvers/dependency', action="manager_dependency", controller="tool_dependencies", conditions=dict( method=[ "GET" ] ) )
webapp.mapper.connect( '/api/dependency_resolvers/dependency', action="install_dependency", controller="tool_dependencies", conditions=dict( method=[ "POST" ] ) )
webapp.mapper.connect( '/api/dependency_resolvers/requirements', action="manager_requirements", controller="tool_dependencies" )
webapp.mapper.connect('/api/dependency_resolvers/clean', action="clean", controller="tool_dependencies", conditions=dict(method=["POST"]))
webapp.mapper.connect( '/api/dependency_resolvers/{id}/dependency', action="resolver_dependency", controller="tool_dependencies", conditions=dict( method=[ "GET" ] ) )
webapp.mapper.connect( '/api/dependency_resolvers/{id}/dependency', action="install_dependency", controller="tool_dependencies", conditions=dict( method=[ "POST" ] ) )
webapp.mapper.connect( '/api/dependency_resolvers/{id}/requirements', action="resolver_requirements", controller="tool_dependencies" )
Expand Down
7 changes: 7 additions & 0 deletions test/integration/test_resolvers.py
Expand Up @@ -95,3 +95,10 @@ def test_conda_install_through_tools_api( self ):
endpoint = "tools/%s/build_dependency_cache" % tool_id
create_response = self._post(endpoint, data=data, admin=True)
self._assert_status_code_is( create_response, 200 )

def test_conda_clean( self ):
endpoint = 'dependencies_resolvers/clean'
create_response = self._post(endpoint, data={}, admin=True)
self._assert_status_code_is(create_response, 200)
response = create_response.json()
assert response == "OK"

0 comments on commit 16b49d9

Please sign in to comment.