From 9b3c061addb4f3e61d72465cf492396b9e07464e Mon Sep 17 00:00:00 2001 From: Dave B Date: Thu, 22 Sep 2016 13:59:11 -0400 Subject: [PATCH 1/3] [16.07] Fix tool dependencies handling in Tool Shed model (#2950) * Fix the cause of toolshed test 1400 failing. * Fix handling of repositories without tool dependencies. * Fix tool dependency retrieval. In some cases, a process might attempt to fetch tool dependencies for revision 1:7334f6d0ac17, but the repository has been updated, and tool dependency metadata has been reassigned to e.g. 7:ce22ceec214a. This commit resolves that issue. * Correct the logic that returns an empty string for an empty dict. * Fix getting latest revision with tool dependencies. * Use self.app instead of trans.app Conflicts: lib/galaxy/webapps/tool_shed/controllers/repository.py --- lib/galaxy/webapps/tool_shed/api/repositories.py | 2 +- lib/galaxy/webapps/tool_shed/controllers/repository.py | 4 ++-- lib/galaxy/webapps/tool_shed/model/__init__.py | 8 +++++--- lib/tool_shed/util/metadata_util.py | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/galaxy/webapps/tool_shed/api/repositories.py b/lib/galaxy/webapps/tool_shed/api/repositories.py index d09aca9051b..5d855434769 100644 --- a/lib/galaxy/webapps/tool_shed/api/repositories.py +++ b/lib/galaxy/webapps/tool_shed/api/repositories.py @@ -782,7 +782,7 @@ class RepositoriesController( BaseAPIController ): else: metadata_dict[ 'repository_dependencies' ] = [] if metadata.includes_tool_dependencies and recursive: - metadata_dict[ 'tool_dependencies' ] = repository.get_tool_dependencies( changehash ) + metadata_dict[ 'tool_dependencies' ] = repository.get_tool_dependencies( self.app, changehash ) else: metadata_dict[ 'tool_dependencies' ] = {} if metadata.includes_tools: diff --git a/lib/galaxy/webapps/tool_shed/controllers/repository.py b/lib/galaxy/webapps/tool_shed/controllers/repository.py index 5a26fa02d99..83381395aea 100644 --- a/lib/galaxy/webapps/tool_shed/controllers/repository.py +++ b/lib/galaxy/webapps/tool_shed/controllers/repository.py @@ -1713,8 +1713,8 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ): owner = kwd.get( 'owner', None ) changeset_revision = kwd.get( 'changeset_revision', None ) repository = suc.get_repository_by_name_and_owner( trans.app, name, owner ) - dependencies = repository.get_tool_dependencies( changeset_revision ) - if dependencies is not None: + dependencies = repository.get_tool_dependencies( trans.app, changeset_revision ) + if len( dependencies ) > 0: return encoding_util.tool_shed_encode( dependencies ) return '' diff --git a/lib/galaxy/webapps/tool_shed/model/__init__.py b/lib/galaxy/webapps/tool_shed/model/__init__.py index 04e909e95cd..57627376603 100644 --- a/lib/galaxy/webapps/tool_shed/model/__init__.py +++ b/lib/galaxy/webapps/tool_shed/model/__init__.py @@ -244,11 +244,13 @@ class Repository( object, Dictifiable ): def get_type_class( self, app ): return app.repository_types_registry.get_class_by_label( self.type ) - def get_tool_dependencies( self, changeset_revision ): + def get_tool_dependencies( self, app, changeset_revision ): + repo = hg.repository( ui.ui(), self.repo_path( app ) ) + changeset_revision = metadata_util.get_next_downloadable_changeset_revision( self, repo, changeset_revision ) for downloadable_revision in self.downloadable_revisions: if downloadable_revision.changeset_revision == changeset_revision: - return downloadable_revision.metadata.get( 'tool_dependencies', [] ) - return [] + return downloadable_revision.metadata.get( 'tool_dependencies', {} ) + return {} def installable_revisions( self, app, sort_revisions=True ): return suc.get_metadata_revisions( self, diff --git a/lib/tool_shed/util/metadata_util.py b/lib/tool_shed/util/metadata_util.py index 19f430a59d7..5cc81f6de4e 100644 --- a/lib/tool_shed/util/metadata_util.py +++ b/lib/tool_shed/util/metadata_util.py @@ -26,7 +26,7 @@ def get_all_dependencies( app, metadata_entry, processed_dependency_links=[] ): dependency_dict[ 'tools' ] = dependency_metadata.metadata[ 'tools' ] dependency_dict[ 'repository_dependencies' ] = [] if dependency_dict['includes_tool_dependencies']: - dependency_dict['tool_dependencies'] = repository.get_tool_dependencies( dependency_dict['changeset_revision'] ) + dependency_dict['tool_dependencies'] = repository.get_tool_dependencies( app, dependency_dict['changeset_revision'] ) if dependency_dict['has_repository_dependencies']: dependency_dict['repository_dependencies'] = get_all_dependencies( app, dependency_metadata, processed_dependency_links ) else: From c06f8c29968971c6c1e0dfc6847b3baf755f3a96 Mon Sep 17 00:00:00 2001 From: Martin Cech Date: Thu, 22 Sep 2016 16:00:51 -0400 Subject: [PATCH 2/3] correct the method call --- lib/galaxy/webapps/tool_shed/model/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/webapps/tool_shed/model/__init__.py b/lib/galaxy/webapps/tool_shed/model/__init__.py index 57627376603..7909315b507 100644 --- a/lib/galaxy/webapps/tool_shed/model/__init__.py +++ b/lib/galaxy/webapps/tool_shed/model/__init__.py @@ -246,7 +246,7 @@ class Repository( object, Dictifiable ): def get_tool_dependencies( self, app, changeset_revision ): repo = hg.repository( ui.ui(), self.repo_path( app ) ) - changeset_revision = metadata_util.get_next_downloadable_changeset_revision( self, repo, changeset_revision ) + changeset_revision = suc.get_next_downloadable_changeset_revision( self, repo, changeset_revision ) for downloadable_revision in self.downloadable_revisions: if downloadable_revision.changeset_revision == changeset_revision: return downloadable_revision.metadata.get( 'tool_dependencies', {} ) From 5e7ee28e0d6937fa53f39b350e04357b554ce9ae Mon Sep 17 00:00:00 2001 From: Martin Cech Date: Thu, 22 Sep 2016 17:48:20 -0400 Subject: [PATCH 3/3] bump freebayes in test (since it was updated) --- .../functional/test_1400_review_migration_stages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/shed_functional/functional/test_1400_review_migration_stages.py b/test/shed_functional/functional/test_1400_review_migration_stages.py index 8499b687be8..926f30ab2f4 100644 --- a/test/shed_functional/functional/test_1400_review_migration_stages.py +++ b/test/shed_functional/functional/test_1400_review_migration_stages.py @@ -29,7 +29,7 @@ class TestToolMigrationStages( ShedTwillTestCase ): 'blast_datatypes', 'bwa_wrappers', 'picard', 'lastz', 'lastz_paired_reads', 'bowtie_color_wrappers', 'bowtie_wrappers', 'xy_plot', 'bam_to_sam' ] - migrated_tool_dependencies = [ 'emboss', '5.0.0', 'freebayes', '0.9.4_9696d0ce8a962f7bb61c4791be5ce44312b81cf8', + migrated_tool_dependencies = [ 'emboss', '5.0.0', 'freebayes', '0.9.4_a46483351fd0196637614121868fb5c386612b55', 'samtools', '0.1.18', 'blast+', '2.2.26+', 'bwa', '0.5.9', 'picard', '1.56.0', 'lastz', '1.02.00', 'bowtie', '0.12.7', 'FreeBayes requires g++', 'ncurses', 'zlib', 'blast.ncbi.nlm.nih.gov', 'fastx_toolkit', '0.0.13', 'samtools', '0.1.16', 'cufflinks',