Merge pull request #2061 from davebx/api_install_performance

Disable install button if changeset is installed.
This commit is contained in:
Martin Cech
2016-04-01 15:57:39 -04:00
2 changed files with 37 additions and 5 deletions
@@ -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',
@@ -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);