From aaf09dc99b0dc2896cbba5d21c132e998f5126e7 Mon Sep 17 00:00:00 2001 From: Marius van den Beek Date: Wed, 27 Apr 2016 13:20:47 +0200 Subject: [PATCH 1/2] Generate metadata in separate conda environment Galaxy supports generating metadata in a separate command (enable beta_tool_command_isolation). This command has its own dependency resolution, that may interfere with thedependency resolution of the actual tool, if the same environment is being used. With this PR we create a new environment when resolving metadata dependencies with conda, that will be active only for metadata generation. --- lib/galaxy/jobs/__init__.py | 2 +- lib/galaxy/tools/__init__.py | 3 ++- lib/galaxy/tools/deps/__init__.py | 2 +- lib/galaxy/tools/deps/resolvers/conda.py | 7 ++++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index 137e81f0b6b..878421d0ac9 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1665,7 +1665,7 @@ class JobWrapper( object ): if metadata_tool is not None: # Due to tool shed hacks for migrate and installed tool tests... # see (``setup_shed_tools_for_test`` in test/base/driver_util.py). - dependency_shell_commands = metadata_tool.build_dependency_shell_commands(job_directory=self.working_directory) + dependency_shell_commands = metadata_tool.build_dependency_shell_commands(job_directory=self.working_directory, metadata=True) if dependency_shell_commands: dependency_shell_commands = "; ".join(dependency_shell_commands) command = "%s; %s" % (dependency_shell_commands, command) diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 18fdd813f66..7b0371ec93f 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -1252,13 +1252,14 @@ class Tool( object, Dictifiable ): visit_input_values( self.inputs, values, validate_inputs ) return messages - def build_dependency_shell_commands( self, job_directory=None ): + def build_dependency_shell_commands( self, job_directory=None, metadata=False ): """Return a list of commands to be run to populate the current environment to include this tools requirements.""" return self.app.toolbox.dependency_manager.dependency_shell_commands( self.requirements, installed_tool_dependencies=self.installed_tool_dependencies, tool_dir=self.tool_dir, job_directory=job_directory, + metadata=metadata ) @property diff --git a/lib/galaxy/tools/deps/__init__.py b/lib/galaxy/tools/deps/__init__.py index d27fe3ee3df..318cfbdd3a0 100644 --- a/lib/galaxy/tools/deps/__init__.py +++ b/lib/galaxy/tools/deps/__init__.py @@ -95,7 +95,7 @@ class DependencyManager( object ): dependency = self.find_dep( name=requirement.name, version=requirement.version, type=requirement.type, - **kwds ) + **kwds) dependency_commands = dependency.shell_commands( requirement ) if not dependency_commands: log.warn( "Failed to resolve dependency on '%s', ignoring", requirement.name ) diff --git a/lib/galaxy/tools/deps/resolvers/conda.py b/lib/galaxy/tools/deps/resolvers/conda.py index e2ac9c69d58..625a11089d3 100644 --- a/lib/galaxy/tools/deps/resolvers/conda.py +++ b/lib/galaxy/tools/deps/resolvers/conda.py @@ -125,7 +125,12 @@ class CondaDependencyResolver(DependencyResolver, ListableDependencyResolver, In return INDETERMINATE_DEPENDENCY # Have installed conda_target and job_directory to send it too. - conda_environment = os.path.join(job_directory, "conda-env") + # If dependency is for metadata generation, store environment in conda-metadata-env + if kwds.get("metadata", False): + conda_env = "conda-metadata-env" + else: + conda_env = "conda-env" + conda_environment = os.path.join(job_directory, conda_env) env_path, exit_code = build_isolated_environment( conda_target, path=conda_environment, From 5dd9d1bafcc4532fdb48b312a47e2f90b7178d80 Mon Sep 17 00:00:00 2001 From: Marius van den Beek Date: Wed, 27 Apr 2016 13:44:45 +0200 Subject: [PATCH 2/2] Fix whitespace and comma use --- lib/galaxy/tools/__init__.py | 2 +- lib/galaxy/tools/deps/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 7b0371ec93f..c4c00b3ef9d 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -1259,7 +1259,7 @@ class Tool( object, Dictifiable ): installed_tool_dependencies=self.installed_tool_dependencies, tool_dir=self.tool_dir, job_directory=job_directory, - metadata=metadata + metadata=metadata, ) @property diff --git a/lib/galaxy/tools/deps/__init__.py b/lib/galaxy/tools/deps/__init__.py index 318cfbdd3a0..d27fe3ee3df 100644 --- a/lib/galaxy/tools/deps/__init__.py +++ b/lib/galaxy/tools/deps/__init__.py @@ -95,7 +95,7 @@ class DependencyManager( object ): dependency = self.find_dep( name=requirement.name, version=requirement.version, type=requirement.type, - **kwds) + **kwds ) dependency_commands = dependency.shell_commands( requirement ) if not dependency_commands: log.warn( "Failed to resolve dependency on '%s', ignoring", requirement.name )