diff --git a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py index b2be980266b..aaf11b14cc7 100644 --- a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py +++ b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py @@ -20,6 +20,8 @@ from tool_shed.util import workflow_util from tool_shed.util import tool_util from tool_shed.util import repository_util +from sqlalchemy import and_ + log = logging.getLogger( __name__ ) @@ -216,9 +218,19 @@ class ToolShedRepositoriesController( BaseAPIController ): Display a list of dictionaries containing information about installed tool shed repositories. """ # Example URL: http://localhost:8763/api/tool_shed_repositories + clause_list = [] + if 'name' in kwd: + clause_list.append( self.app.install_model.ToolShedRepository.table.c.name == kwd.get( 'name', None ) ) + if 'owner' in kwd: + clause_list.append( self.app.install_model.ToolShedRepository.table.c.owner == kwd.get( 'owner', None ) ) + if 'changeset' in kwd: + clause_list.append( self.app.install_model.ToolShedRepository.table.c.changeset_revision == kwd.get( 'changeset', None ) ) tool_shed_repository_dicts = [] - for tool_shed_repository in trans.install_model.context.query( self.app.install_model.ToolShedRepository ) \ - .order_by( self.app.install_model.ToolShedRepository.table.c.name ): + query = trans.install_model.context.query( self.app.install_model.ToolShedRepository ) \ + .order_by( self.app.install_model.ToolShedRepository.table.c.name ) + if len( clause_list ) > 0: + query = query.filter( and_( *clause_list ) ) + for tool_shed_repository in query.all(): tool_shed_repository_dict = \ tool_shed_repository.to_dict( value_mapper=self.__get_value_mapper( trans, tool_shed_repository ) ) tool_shed_repository_dict[ 'url' ] = web.url_for( controller='tool_shed_repositories', diff --git a/templates/admin/tool_shed_repository/preview_repository.mako b/templates/admin/tool_shed_repository/preview_repository.mako index 71ff2a82e35..4cd042e09fa 100644 --- a/templates/admin/tool_shed_repository/preview_repository.mako +++ b/templates/admin/tool_shed_repository/preview_repository.mako @@ -238,10 +238,30 @@ function show_create_html() { $('#select_existing_' + clean_name).click(show_select_html); $('#cancel_' + clean_name).click(show_picker_button); } +function check_if_installed(name, owner, changeset) { + params = {name: name, owner: owner} + $.get('${h.url_for(controller='api', action='tool_shed_repositories')}', params, function(data) { + for (var index = 0; index < data.length; index++) { + var repository = data[index]; + var installed = !repository.deleted && !repository.uninstalled; + var changeset_match = repository.changeset_revision == changeset || + repository.installed_changeset_revision == changeset; + if (repository.name == name && repository.owner == owner && installed && changeset_match) { + $('#install_repository').prop('disabled', true); + $('#install_repository').val('This revision is already installed'); + } + else { + $('#install_repository').prop('disabled', false); + $('#install_repository').val('Install this revision'); + } + } + }); +} function changeset_metadata() { - metadata_key = $('#changeset').find("option:selected").text(); - $("#current_changeset").text(metadata_key); - var repository_metadata = repository_information.metadata[metadata_key]; + var changeset = $('#changeset').find("option:selected").text(); + $("#current_changeset").text(changeset); + var repository_metadata = repository_information.metadata[changeset]; + check_if_installed(repository_information.name, repository_information.owner, changeset.split(':')[1]); $(".repository_dependency_row").remove(); $(".tool_dependency_row").remove(); process_dependencies(repository_metadata);