diff --git a/lib/galaxy/tools/deps/resolvers/conda.py b/lib/galaxy/tools/deps/resolvers/conda.py index 56e368db41b..7ab8918ea48 100644 --- a/lib/galaxy/tools/deps/resolvers/conda.py +++ b/lib/galaxy/tools/deps/resolvers/conda.py @@ -145,7 +145,7 @@ class CondaDependencyResolver(DependencyResolver, ListableDependencyResolver, In dependencies = [] is_installed = self.conda_context.has_env(env) - if not is_installed and self.auto_install: + if not is_installed and (self.auto_install or kwds.get('install', False)): is_installed = self.install_all(conda_targets) if is_installed: @@ -191,7 +191,7 @@ class CondaDependencyResolver(DependencyResolver, ListableDependencyResolver, In preserve_python_environment = kwds.get("preserve_python_environment", False) job_directory = kwds.get("job_directory", None) - if not is_installed and self.auto_install and job_directory: + if not is_installed and (self.auto_install or kwds.get('install', False)): is_installed = self.install_dependency(name=name, version=version, type=type) if not is_installed: diff --git a/lib/galaxy/tools/deps/views.py b/lib/galaxy/tools/deps/views.py index 8f23335d7df..d37fed4fc8f 100644 --- a/lib/galaxy/tools/deps/views.py +++ b/lib/galaxy/tools/deps/views.py @@ -45,6 +45,9 @@ class DependencyResolversView(object): def resolver_dependency(self, index, **kwds): return self._dependency(**kwds) + def install_dependencies(self, requirements): + return self._dependency_manager._requirements_to_dependencies_dict(requirements, **{'install': True}) + def install_dependency(self, index=None, **payload): """ Installs dependency using highest priority resolver that supports dependency installation diff --git a/lib/galaxy/webapps/galaxy/api/tools.py b/lib/galaxy/webapps/galaxy/api/tools.py index b76dd9a3f40..d640bdae10d 100644 --- a/lib/galaxy/webapps/galaxy/api/tools.py +++ b/lib/galaxy/webapps/galaxy/api/tools.py @@ -141,11 +141,11 @@ class ToolsController( BaseAPIController, UsesVisualizationMixin ): force_rebuild: If true and chache dir exists, attempts to delete cache dir """ tool = self._get_tool(id) - [tool._view.install_dependency(id=None, **req.to_dict()) for req in tool.requirements] + tool._view.install_dependencies(tool.requirements) if kwds.get('build_dependency_cache'): tool.build_dependency_cache(**kwds) # TODO: rework resolver install system to log and report what has been done. - # _view.install_dependency should return a dict with stdout, stderr and success status + # _view.install_dependencies should return a dict with stdout, stderr and success status return tool.tool_requirements_status @expose_api diff --git a/lib/tool_shed/galaxy_install/install_manager.py b/lib/tool_shed/galaxy_install/install_manager.py index 7da8c6e40e7..eaaa0469d21 100644 --- a/lib/tool_shed/galaxy_install/install_manager.py +++ b/lib/tool_shed/galaxy_install/install_manager.py @@ -905,15 +905,15 @@ class InstallRepositoryManager( object ): if 'tools' in metadata and install_resolver_dependencies: self.update_tool_shed_repository_status( tool_shed_repository, self.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES ) - requirements = suc.get_unique_requirements_from_repository(tool_shed_repository) - [self._view.install_dependency(id=None, **req) for req in requirements] - if self.app.config.use_cached_dependency_manager: - cached_requirements = [] - for tool_d in metadata['tools']: - tool = self.app.toolbox._tools_by_id.get(tool_d['guid'], None) - if tool and tool.requirements not in cached_requirements: - cached_requirements.append(tool.requirements) + installed_requirements = [] + for tool_d in metadata['tools']: + tool = self.app.toolbox._tools_by_id.get(tool_d['guid'], None) + if tool and tool.requirements not in installed_requirements: + self._view.install_dependencies(tool.requirements) + installed_requirements.append(tool.requirements) + if self.app.config.use_cached_dependency_manager: tool.build_dependency_cache() + if install_tool_dependencies and tool_shed_repository.tool_dependencies and 'tool_dependencies' in metadata: work_dir = tempfile.mkdtemp( prefix="tmp-toolshed-itsr" ) # Install tool dependencies.