Merge branch 'remove_toolshed_installation_grid' into dev

(post-prettier merge was simple to resolve)
This commit is contained in:
Dannon Baker
2017-10-30 09:21:35 -04:00
16 changed files with 70 additions and 317 deletions
@@ -99,9 +99,7 @@ var AdminPanel = Backbone.View.extend({
},
{
title: "Monitor installing repositories",
url:
"admin_toolshed/monitor_repository_installation?installing_repository_ids=" +
self.settings.installing_repository_ids,
url: "admin_toolshed/monitor_repository_installation",
enabled: self.settings.installing_repository_ids
},
{
@@ -107,7 +107,7 @@ define(["mvc/toolshed/toolshed-model", "mvc/toolshed/util"], function(
var repositories = iri_params.repositories;
var new_route = "status/r/" + repositories.join("|");
$.post(
Galaxy.root + "admin_toolshed/manage_repositories",
Galaxy.root + "admin_toolshed/install_repositories",
iri_params,
function(data) {
console.log(
@@ -388,7 +388,7 @@ define(
doInstall: function(params) {
var controller_url =
Galaxy.root + "admin_toolshed/manage_repositories";
Galaxy.root + "admin_toolshed/install_repositories";
var repositories = params.repositories;
var new_route = "status/r/" + repositories.join("|");
$.post(controller_url, params, function(data) {
@@ -44,8 +44,6 @@ log = logging.getLogger(__name__)
class AdminToolshed(AdminGalaxy):
installed_repository_grid = admin_toolshed_grids.InstalledRepositoryGrid()
repository_installation_grid = admin_toolshed_grids.RepositoryInstallationGrid()
tool_dependency_grid = admin_toolshed_grids.ToolDependencyGrid()
@web.expose
@web.require_admin
@@ -560,72 +558,28 @@ class AdminToolshed(AdminGalaxy):
@web.expose
@web.require_admin
def manage_repositories(self, trans, **kwd):
message = escape(kwd.get('message', ''))
api_installation = util.asbool(kwd.get('api', 'false'))
if api_installation:
tsr_ids = json.loads(kwd.get('tool_shed_repository_ids', '[]'))
kwd['tool_shed_repository_ids'] = tsr_ids
tsridslist = common_util.get_tool_shed_repository_ids(**kwd)
else:
tsridslist = common_util.get_tool_shed_repository_ids(**kwd)
if 'operation' in kwd:
operation = kwd['operation'].lower()
if not tsridslist:
message = 'Select at least 1 tool shed repository to %s.' % operation
kwd['message'] = message
kwd['status'] = 'error'
del kwd['operation']
return trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='manage_repositories',
**kwd))
if operation == 'browse':
return trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='browse_repository',
**kwd))
elif operation == 'uninstall':
# TODO: I believe this block should be removed, but make sure..
repositories_for_uninstallation = []
for repository_id in tsridslist:
repository = trans.install_model.context.query(trans.install_model.ToolShedRepository) \
.get(trans.security.decode_id(repository_id))
if repository.status in [trans.install_model.ToolShedRepository.installation_status.INSTALLED,
trans.install_model.ToolShedRepository.installation_status.ERROR]:
repositories_for_uninstallation.append(repository)
if repositories_for_uninstallation:
return trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='uninstall_repositories',
**kwd))
else:
kwd['message'] = 'All selected tool shed repositories are already uninstalled.'
kwd['status'] = 'error'
elif operation == "install":
irm = install_manager.InstallRepositoryManager(trans.app)
reinstalling = util.string_as_bool(kwd.get('reinstalling', False))
encoded_kwd = kwd['encoded_kwd']
decoded_kwd = encoding_util.tool_shed_decode(encoded_kwd)
install_resolver_dependencies = CheckboxField.is_checked(decoded_kwd.get('install_resolver_dependencies', ''))
install_tool_dependencies = CheckboxField.is_checked(decoded_kwd.get('install_tool_dependencies', ''))
tsr_ids = decoded_kwd['tool_shed_repository_ids']
decoded_kwd['install_resolver_dependencies'] = install_resolver_dependencies
decoded_kwd['install_tool_dependencies'] = install_tool_dependencies
try:
tool_shed_repositories = irm.install_repositories(
tsr_ids=tsr_ids,
decoded_kwd=decoded_kwd,
reinstalling=reinstalling,
)
tsr_ids_for_monitoring = [trans.security.encode_id(tsr.id) for tsr in tool_shed_repositories]
if api_installation:
return json.dumps(tsr_ids_for_monitoring)
else:
trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='monitor_repository_installation',
tool_shed_repository_ids=tsr_ids_for_monitoring))
except install_manager.RepositoriesInstalledException as e:
kwd['message'] = e.message
kwd['status'] = 'error'
return self.repository_installation_grid(trans, **kwd)
def install_repositories(self, trans, **kwd):
reinstalling = util.string_as_bool(kwd.get('reinstalling', False))
encoded_kwd = kwd.get('encoded_kwd')
decoded_kwd = encoding_util.tool_shed_decode(encoded_kwd) if encoded_kwd else {}
install_resolver_dependencies = CheckboxField.is_checked(decoded_kwd.get('install_resolver_dependencies', ''))
install_tool_dependencies = CheckboxField.is_checked(decoded_kwd.get('install_tool_dependencies', ''))
decoded_kwd['install_resolver_dependencies'] = install_resolver_dependencies
decoded_kwd['install_tool_dependencies'] = install_tool_dependencies
tsr_ids = decoded_kwd.get('tool_shed_repository_ids')
if not tsr_ids:
return self.message_exception(trans, 'Repository ids missing.')
irm = install_manager.InstallRepositoryManager(trans.app)
try:
tool_shed_repositories = irm.install_repositories(
tsr_ids=tsr_ids,
decoded_kwd=decoded_kwd,
reinstalling=reinstalling,
)
tsr_ids_for_monitoring = [trans.security.encode_id(tsr.id) for tsr in tool_shed_repositories]
return json.dumps(tsr_ids_for_monitoring)
except install_manager.RepositoriesInstalledException as e:
return self.message_exception(trans, e.message)
@web.expose
@web.require_admin
@@ -784,15 +738,6 @@ class AdminToolshed(AdminGalaxy):
status = kwd.get('status', 'done')
tool_dependency_ids = tool_dependency_util.get_tool_dependency_ids(as_string=False, **kwd)
repository_id = kwd.get('repository_id', None)
if tool_dependency_ids:
# We need a tool_shed_repository, so get it from one of the tool_dependencies.
tool_dependency = tool_dependency_util.get_tool_dependency(trans.app, tool_dependency_ids[0])
tool_shed_repository = tool_dependency.tool_shed_repository
else:
# The user must be on the manage_repository_tool_dependencies page and clicked the button to either install or uninstall a
# tool dependency, but they didn't check any of the available tool dependencies on which to perform the action.
tool_shed_repository = repository_util.get_tool_shed_repository_by_id(trans.app, repository_id)
self.tool_dependency_grid.title = "Tool shed repository '%s' tool dependencies" % escape(tool_shed_repository.name)
if 'operation' in kwd:
operation = kwd['operation'].lower()
if not tool_dependency_ids:
@@ -828,9 +773,6 @@ class AdminToolshed(AdminGalaxy):
message += ' and restart your Galaxy server to install tool dependencies.'
kwd['message'] = message
kwd['status'] = 'error'
# Redirect if no tool dependencies are in the process of being installed.
if tool_shed_repository.tool_dependencies_being_installed:
return self.tool_dependency_grid(trans, **kwd)
return trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='manage_repository_tool_dependencies',
tool_dependency_ids=tool_dependency_ids,
@@ -841,11 +783,23 @@ class AdminToolshed(AdminGalaxy):
@web.expose
@web.require_admin
def monitor_repository_installation(self, trans, **kwd):
tsridslist = common_util.get_tool_shed_repository_ids(**kwd)
if not tsridslist:
tsridslist = repository_util.get_ids_of_tool_shed_repositories_being_installed(trans.app, as_string=False)
kwd['tool_shed_repository_ids'] = tsridslist
return self.repository_installation_grid(trans, **kwd)
tsr_ids = common_util.get_tool_shed_repository_ids(**kwd)
if not tsr_ids:
tsr_ids = repository_util.get_ids_of_tool_shed_repositories_being_installed(trans.app, as_string=False)
tsr_ids = [trans.security.decode_id(tsr_id) for tsr_id in tsr_ids]
tool_shed_repositories = []
for tsr_id in tsr_ids:
tsr = trans.install_model.context.query(trans.install_model.ToolShedRepository).get(tsr_id)
tool_shed_repositories.append(tsr)
clause_list = []
for tsr_id in tsr_ids:
clause_list.append(trans.install_model.ToolShedRepository.table.c.id == tsr_id)
query = trans.install_model.context.current.query(trans.install_model.ToolShedRepository).filter(or_(*clause_list))
return trans.fill_template('admin/tool_shed_repository/monitor_repository_installation.mako',
tool_shed_repositories=tool_shed_repositories,
query=query,
message=escape(kwd.get('message', '')),
status=kwd.get('status'))
@web.json
@web.require_admin
@@ -992,20 +946,19 @@ class AdminToolshed(AdminGalaxy):
tool_panel_section_keys=tool_panel_section_keys,
tool_path=tool_path,
tool_shed_url=tool_shed_url)
encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
install_repository_manager.initiate_repository_installation(installation_dict)
return trans.fill_template('admin/tool_shed_repository/initiate_repository_installation.mako',
return trans.fill_template('admin/tool_shed_repository/monitor_repository_installation.mako',
encoded_kwd=encoded_kwd,
query=query,
tool_shed_repositories=tool_shed_repositories,
initiate_repository_installation_ids=encoded_repository_ids,
reinstalling=False)
else:
kwd['message'] = message
kwd['message'] = message if message else 'Repository has already been installed.'
kwd['status'] = status
return trans.response.send_redirect(web.url_for(controller='admin_toolshed',
action='manage_repositories',
action='monitor_repository_installation',
**kwd))
shed_tool_conf_select_field = tool_util.build_shed_tool_conf_select_field(trans.app)
tool_path = suc.get_tool_path_by_shed_tool_conf_filename(trans.app, shed_tool_conf)
@@ -1311,7 +1264,7 @@ class AdminToolshed(AdminGalaxy):
clause_list.append(trans.install_model.ToolShedRepository.table.c.id == tsr_id)
query = trans.install_model.context.current.query(trans.install_model.ToolShedRepository) \
.filter(or_(*clause_list))
return trans.fill_template('admin/tool_shed_repository/initiate_repository_installation.mako',
return trans.fill_template('admin/tool_shed_repository/monitor_repository_installation.mako',
encoded_kwd=encoded_kwd,
query=query,
tool_shed_repositories=tool_shed_repositories,
@@ -1,12 +1,10 @@
import logging
from sqlalchemy import false, or_
from galaxy import util
from galaxy.model import tool_shed_install
from galaxy.web import url_for
from galaxy.web.framework.helpers import grids, iff
from tool_shed.util import repository_util, tool_dependency_util
from tool_shed.util import repository_util
log = logging.getLogger(__name__)
@@ -236,192 +234,3 @@ class InstalledRepositoryGrid(grids.Grid):
legend_str += '%s&nbsp;&nbsp;This repository contains exported workflows<br/>' % generate_includes_workflows_img_str()
legend_str += '%s&nbsp;&nbsp;Unable to get information from the Tool Shed<br/>' % generate_unknown_img_str()
return legend_str
class RepositoryInstallationGrid(grids.Grid):
class NameColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_shed_repository):
return tool_shed_repository.name
class DescriptionColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_shed_repository):
return tool_shed_repository.description
class OwnerColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_shed_repository):
return tool_shed_repository.owner
class RevisionColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_shed_repository):
return tool_shed_repository.changeset_revision
class StatusColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_shed_repository):
status_label = tool_shed_repository.status
if tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.CLONING,
trans.install_model.ToolShedRepository.installation_status.SETTING_TOOL_VERSIONS,
trans.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES,
trans.install_model.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES]:
bgcolor = trans.install_model.ToolShedRepository.states.INSTALLING
elif tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.NEW,
trans.install_model.ToolShedRepository.installation_status.UNINSTALLED]:
bgcolor = trans.install_model.ToolShedRepository.states.UNINSTALLED
elif tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.ERROR]:
bgcolor = trans.install_model.ToolShedRepository.states.ERROR
elif tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.DEACTIVATED]:
bgcolor = trans.install_model.ToolShedRepository.states.WARNING
elif tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.INSTALLED]:
if tool_shed_repository.missing_tool_dependencies or tool_shed_repository.missing_repository_dependencies:
bgcolor = trans.install_model.ToolShedRepository.states.WARNING
if tool_shed_repository.missing_tool_dependencies and not tool_shed_repository.missing_repository_dependencies:
status_label = '%s, missing tool dependencies' % status_label
if tool_shed_repository.missing_repository_dependencies and not tool_shed_repository.missing_tool_dependencies:
status_label = '%s, missing repository dependencies' % status_label
if tool_shed_repository.missing_tool_dependencies and tool_shed_repository.missing_repository_dependencies:
status_label = '%s, missing both tool and repository dependencies' % status_label
if not tool_shed_repository.missing_tool_dependencies and not tool_shed_repository.missing_repository_dependencies:
bgcolor = trans.install_model.ToolShedRepository.states.OK
else:
bgcolor = trans.install_model.ToolShedRepository.states.ERROR
rval = '<div class="count-box state-color-%s" id="RepositoryStatus-%s">%s</div>' % \
(bgcolor, trans.security.encode_id(tool_shed_repository.id), status_label)
return rval
title = "Monitor installing tool shed repositories"
template = "admin/tool_shed_repository/repository_installation_grid.mako"
model_class = tool_shed_install.ToolShedRepository
default_sort_key = "-create_time"
num_rows_per_page = 50
preserve_state = True
use_paging = False
columns = [
NameColumn("Name",
link=(lambda item: iff(item.status in
[tool_shed_install.ToolShedRepository.installation_status.NEW,
tool_shed_install.ToolShedRepository.installation_status.CLONING,
tool_shed_install.ToolShedRepository.installation_status.SETTING_TOOL_VERSIONS,
tool_shed_install.ToolShedRepository.installation_status.INSTALLING_REPOSITORY_DEPENDENCIES,
tool_shed_install.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES,
tool_shed_install.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES,
tool_shed_install.ToolShedRepository.installation_status.UNINSTALLED],
None, dict(action="manage_repository", id=item.id))),
filterable="advanced"),
DescriptionColumn("Description",
filterable="advanced"),
OwnerColumn("Owner",
filterable="advanced"),
RevisionColumn("Revision",
filterable="advanced"),
StatusColumn("Installation Status",
filterable="advanced",
label_id_prefix="RepositoryStatus-")
]
operations = []
def build_initial_query(self, trans, **kwd):
clause_list = []
tool_shed_repository_ids = util.listify(kwd.get('tool_shed_repository_ids', None))
if tool_shed_repository_ids:
for tool_shed_repository_id in tool_shed_repository_ids:
clause_list.append(self.model_class.table.c.id == trans.security.decode_id(tool_shed_repository_id))
if clause_list:
return trans.install_model.context.query(self.model_class) \
.filter(or_(*clause_list))
for tool_shed_repository in trans.install_model.context.query(self.model_class) \
.filter(self.model_class.table.c.deleted == false()):
if tool_shed_repository.status in [trans.install_model.ToolShedRepository.installation_status.NEW,
trans.install_model.ToolShedRepository.installation_status.CLONING,
trans.install_model.ToolShedRepository.installation_status.SETTING_TOOL_VERSIONS,
trans.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES,
trans.install_model.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES]:
clause_list.append(self.model_class.table.c.id == tool_shed_repository.id)
if clause_list:
return trans.install_model.context.query(self.model_class) \
.filter(or_(*clause_list))
return trans.install_model.context.query(self.model_class) \
.filter(self.model_class.table.c.status == trans.install_model.ToolShedRepository.installation_status.NEW)
def apply_query_filter(self, trans, query, **kwd):
tool_shed_repository_id = kwd.get('tool_shed_repository_id', None)
if tool_shed_repository_id:
return query.filter_by(tool_shed_repository_id=trans.security.decode_id(tool_shed_repository_id))
return query
class ToolDependencyGrid(grids.Grid):
class NameColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_dependency):
return tool_dependency.name
class VersionColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_dependency):
return tool_dependency.version
class TypeColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_dependency):
return tool_dependency.type
class StatusColumn(grids.TextColumn):
def get_value(self, trans, grid, tool_dependency):
if tool_dependency.status in [trans.install_model.ToolDependency.installation_status.INSTALLING]:
bgcolor = trans.install_model.ToolDependency.states.INSTALLING
elif tool_dependency.status in [trans.install_model.ToolDependency.installation_status.NEVER_INSTALLED,
trans.install_model.ToolDependency.installation_status.UNINSTALLED]:
bgcolor = trans.install_model.ToolDependency.states.UNINSTALLED
elif tool_dependency.status in [trans.install_model.ToolDependency.installation_status.ERROR]:
bgcolor = trans.install_model.ToolDependency.states.ERROR
elif tool_dependency.status in [trans.install_model.ToolDependency.installation_status.INSTALLED]:
bgcolor = trans.install_model.ToolDependency.states.OK
rval = '<div class="count-box state-color-%s" id="ToolDependencyStatus-%s">%s</div>' % \
(bgcolor, trans.security.encode_id(tool_dependency.id), tool_dependency.status)
return rval
title = "Tool Dependencies"
template = "admin/tool_shed_repository/tool_dependencies_grid.mako"
model_class = tool_shed_install.ToolDependency
default_sort_key = "-create_time"
num_rows_per_page = 50
preserve_state = True
use_paging = False
columns = [
NameColumn("Name",
link=(lambda item: iff(item.status in [tool_shed_install.ToolDependency.installation_status.NEVER_INSTALLED,
tool_shed_install.ToolDependency.installation_status.INSTALLING,
tool_shed_install.ToolDependency.installation_status.UNINSTALLED],
None,
dict(action="manage_tool_dependencies", operation='browse', id=item.id))),
filterable="advanced"),
VersionColumn("Version",
filterable="advanced"),
TypeColumn("Type",
filterable="advanced"),
StatusColumn("Installation Status",
filterable="advanced"),
]
def build_initial_query(self, trans, **kwd):
tool_dependency_ids = tool_dependency_util.get_tool_dependency_ids(as_string=False, **kwd)
if tool_dependency_ids:
clause_list = []
for tool_dependency_id in tool_dependency_ids:
clause_list.append(self.model_class.table.c.id == trans.security.decode_id(tool_dependency_id))
return trans.install_model.context.query(self.model_class) \
.filter(or_(*clause_list))
return trans.install_model.context.query(self.model_class)
def apply_query_filter(self, trans, query, **kwd):
tool_dependency_id = kwd.get('tool_dependency_id', None)
if tool_dependency_id:
return query.filter_by(tool_dependency_id=trans.security.decode_id(tool_dependency_id))
return query
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
"use strict";define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(e,t){return{RepoQueueView:Backbone.View.extend({el:"#center",defaults:[{}],initialize:function(t){var o=this;this.model=new e.RepoQueue,this.listenTo(this.model,"sync",this.render),this.model.fetch(),o.render()},render:function(e){var o=this,i=o.templateRepoQueue,r=o.model.models;o.$el.html(i({title:"Repository Installation Queue",repositories:r,queue:t.queueLength()})),$("#center").css("overflow","auto"),o.bindEvents()},bindEvents:function(){var e=this;$(".install_one").on("click",function(){var t=e.loadFromQueue($(this).attr("data-repokey"));e.installFromQueue(t,$(this).attr("data-repokey"))}),$(".remove_one").on("click",function(){var e=$(this).attr("data-repokey"),t=JSON.parse(localStorage.repositories);if(t.hasOwnProperty(e)){var o=t[e].repository.id;delete t[e],$("#queued_repository_"+o).remove()}localStorage.repositories=JSON.stringify(t)}),$("#clear_queue").on("click",function(){localStorage.repositories="{}"}),$("#from_workflow").on("click",function(){Backbone.history.navigate("workflows",{trigger:!0,replace:!0})})},installFromQueue:function(e,o){var i=Object();i.install_tool_dependencies=e.install_tool_dependencies,i.install_repository_dependencies=e.install_repository_dependencies,i.install_resolver_dependencies=e.install_resolver_dependencies,i.tool_panel_section=e.tool_panel_section,i.shed_tool_conf=e.shed_tool_conf,i.repositories=JSON.stringify([[e.repository.id,e.changeset_revision]]),i.tool_shed_repository_ids=JSON.stringify([e.repository.id]),i.tool_shed_url=o.split("|")[0],i.changeset=e.changeset_revision;var r=Galaxy.root+"api/tool_shed_repositories/install?async=True";if($("#queued_repository_"+e.repository.id).remove(),localStorage.repositories){void 0===o&&(o=t.queueKey(e));var s=JSON.parse(localStorage.repositories);s.hasOwnProperty(o)&&(delete s[o],localStorage.repositories=JSON.stringify(s))}$.post(r,i,function(e){var t=JSON.parse(e),o="status/r/"+t.repositories.join("|");$.post(Galaxy.root+"admin_toolshed/manage_repositories",t,function(e){console.log("Initializing repository installation succeeded")}),Backbone.history.navigate(o,{trigger:!0,replace:!0})})},loadFromQueue:function(e){var t=JSON.parse(localStorage.repositories);if(t.hasOwnProperty(e))return t[e]},reDraw:function(e){this.$el.empty(),this.initialize(e),this.model.fetch(),this.render(e)},templateRepoQueue:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="tab-pane" id="panel_header" id="repository_queue">','<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Revision</th>','<th class="datasetRow">ToolShed</th>','<th class="datasetRow">Install</th>','<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',"</tr>","</thead>","<tbody>","<% _.each(repositories, function(repository) { %>",'<tr id="queued_repository_<%= repository.get("id") %>">','<td class="datasetRow"><%= repository.get("repository").name %></td>','<td class="datasetRow"><%= repository.get("repository").owner %></td>','<td class="datasetRow"><%= repository.get("changeset_revision") %></td>','<td class="datasetRow"><%= repository.get("tool_shed_url") %></td>','<td class="datasetRow">','<input class="btn btn-primary install_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="install_repository_<%= repository.get("id") %>" name="install_repository" value="Install now" />',"</td>",'<td class="datasetRow">','<input class="btn btn-primary remove_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="unqueue_repository_<%= repository.get("id") %>" name="unqueue_repository" value="Remove from queue" />',"</td>","</tr>","<% }); %>","</tbody>","</table>",'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',"</div>"].join(""))})}});
"use strict";define(["mvc/toolshed/toolshed-model","mvc/toolshed/util"],function(e,t){return{RepoQueueView:Backbone.View.extend({el:"#center",defaults:[{}],initialize:function(t){var o=this;this.model=new e.RepoQueue,this.listenTo(this.model,"sync",this.render),this.model.fetch(),o.render()},render:function(e){var o=this,i=o.templateRepoQueue,s=o.model.models;o.$el.html(i({title:"Repository Installation Queue",repositories:s,queue:t.queueLength()})),$("#center").css("overflow","auto"),o.bindEvents()},bindEvents:function(){var e=this;$(".install_one").on("click",function(){var t=e.loadFromQueue($(this).attr("data-repokey"));e.installFromQueue(t,$(this).attr("data-repokey"))}),$(".remove_one").on("click",function(){var e=$(this).attr("data-repokey"),t=JSON.parse(localStorage.repositories);if(t.hasOwnProperty(e)){var o=t[e].repository.id;delete t[e],$("#queued_repository_"+o).remove()}localStorage.repositories=JSON.stringify(t)}),$("#clear_queue").on("click",function(){localStorage.repositories="{}"}),$("#from_workflow").on("click",function(){Backbone.history.navigate("workflows",{trigger:!0,replace:!0})})},installFromQueue:function(e,o){var i=Object();i.install_tool_dependencies=e.install_tool_dependencies,i.install_repository_dependencies=e.install_repository_dependencies,i.install_resolver_dependencies=e.install_resolver_dependencies,i.tool_panel_section=e.tool_panel_section,i.shed_tool_conf=e.shed_tool_conf,i.repositories=JSON.stringify([[e.repository.id,e.changeset_revision]]),i.tool_shed_repository_ids=JSON.stringify([e.repository.id]),i.tool_shed_url=o.split("|")[0],i.changeset=e.changeset_revision;var s=Galaxy.root+"api/tool_shed_repositories/install?async=True";if($("#queued_repository_"+e.repository.id).remove(),localStorage.repositories){void 0===o&&(o=t.queueKey(e));var r=JSON.parse(localStorage.repositories);r.hasOwnProperty(o)&&(delete r[o],localStorage.repositories=JSON.stringify(r))}$.post(s,i,function(e){var t=JSON.parse(e),o="status/r/"+t.repositories.join("|");$.post(Galaxy.root+"admin_toolshed/install_repositories",t,function(e){console.log("Initializing repository installation succeeded")}),Backbone.history.navigate(o,{trigger:!0,replace:!0})})},loadFromQueue:function(e){var t=JSON.parse(localStorage.repositories);if(t.hasOwnProperty(e))return t[e]},reDraw:function(e){this.$el.empty(),this.initialize(e),this.model.fetch(),this.render(e)},templateRepoQueue:_.template(['<div class="unified-panel-header" id="panel_header" unselectable="on">','<div class="unified-panel-header-inner"><%= title %></div>','<div class="unified-panel-header-inner" style="position: absolute; right: 5px; top: 0px;"><a href="#/queue">Repository Queue (<%= queue %>)</a></div>',"</div>",'<div class="tab-pane" id="panel_header" id="repository_queue">','<table id="queued_repositories" class="grid" border="0" cellpadding="2" cellspacing="2" width="100%">','<thead id="grid-table-header">',"<tr>",'<th class="datasetRow">Name</th>','<th class="datasetRow">Owner</th>','<th class="datasetRow">Revision</th>','<th class="datasetRow">ToolShed</th>','<th class="datasetRow">Install</th>','<th class="datasetRow"><input class="btn btn-primary" type="submit" id="clear_queue" name="clear_queue" value="Clear queue" /></th>',"</tr>","</thead>","<tbody>","<% _.each(repositories, function(repository) { %>",'<tr id="queued_repository_<%= repository.get("id") %>">','<td class="datasetRow"><%= repository.get("repository").name %></td>','<td class="datasetRow"><%= repository.get("repository").owner %></td>','<td class="datasetRow"><%= repository.get("changeset_revision") %></td>','<td class="datasetRow"><%= repository.get("tool_shed_url") %></td>','<td class="datasetRow">','<input class="btn btn-primary install_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="install_repository_<%= repository.get("id") %>" name="install_repository" value="Install now" />',"</td>",'<td class="datasetRow">','<input class="btn btn-primary remove_one" data-repokey="<%= repository.get("queue_key") %>" type="submit" id="unqueue_repository_<%= repository.get("id") %>" name="unqueue_repository" value="Remove from queue" />',"</td>","</tr>","<% }); %>","</tbody>","</table>",'<input type="button" class="btn btn-primary" id="from_workflow" value="Add from workflow" />',"</div>"].join(""))})}});
//# sourceMappingURL=../../../maps/mvc/toolshed/repository-queue-view.js.map
File diff suppressed because one or more lines are too long
@@ -1,4 +1,5 @@
<%inherit file="/base.mako"/>
<%namespace file="/message.mako" import="render_msg" />
<%namespace file="/admin/tool_shed_repository/common.mako" import="*" />
<%def name="javascripts()">
@@ -10,24 +11,30 @@
<%def name="repository_installation_javascripts()">
<script type="text/javascript">
$(document).ready(function( ){
initiate_repository_installation( "${initiate_repository_installation_ids}", "${encoded_kwd}", "${reinstalling}" );
});
%if context.get("initiate_repository_installation_ids"):
$(document).ready(function( ){
initiate_repository_installation( "${initiate_repository_installation_ids}", "${encoded_kwd}", "${reinstalling}" );
});
%endif
var initiate_repository_installation = function ( iri_ids, encoded_kwd, reinstalling ) {
// Make ajax call
$.ajax( {
type: "POST",
url: "${h.url_for( controller='admin_toolshed', action='manage_repositories' )}",
url: "${h.url_for( controller='admin_toolshed', action='install_repositories' )}",
dataType: "html",
data: { operation: "install", tool_shed_repository_ids: iri_ids, encoded_kwd: encoded_kwd, reinstalling: reinstalling },
data: { tool_shed_repository_ids: iri_ids, encoded_kwd: encoded_kwd, reinstalling: reinstalling },
success : function ( data ) {
console.log( "Initializing repository installation succeeded" );
},
}
});
};
</script>
</%def>
%if context.get("message"):
${render_msg( message, status )}
%endif
%if tool_shed_repositories:
<div class="toolForm">
<div class="toolFormTitle">Monitor installing tool shed repositories</div>
@@ -68,4 +75,6 @@
<br clear="left"/>
</div>
</div>
%else:
${render_msg("There is no repository being installed.", "info")}
%endif
@@ -1,8 +0,0 @@
<%inherit file="/grid_base.mako"/>
<%namespace file="/admin/tool_shed_repository/common.mako" import="*" />
<%def name="javascripts()">
${parent.javascripts()}
${repository_installation_status_updater()}
${repository_installation_updater()}
</%def>
@@ -1,8 +0,0 @@
<%inherit file="/grid_base.mako"/>
<%namespace file="/admin/tool_shed_repository/common.mako" import="*" />
<%def name="javascripts()">
${parent.javascripts()}
${dependency_status_updater()}
${tool_dependency_installation_updater()}
</%def>
+1 -1
View File
@@ -921,7 +921,7 @@ class ShedTwillTestCase(TwillTestCase):
repository_ids = re.sub('[^a-fA-F0-9,]+', '', repository_ids)
encoded_kwd = install_parameters.group(2)
reinstalling = install_parameters.group(3)
url = '/admin_toolshed/manage_repositories?operation=install&tool_shed_repository_ids=%s&encoded_kwd=%s&reinstalling=%s' % \
url = '/admin_toolshed/install_repositories?tool_shed_repository_ids=%s&encoded_kwd=%s&reinstalling=%s' % \
(','.join(galaxy.util.listify(repository_ids)), encoded_kwd, reinstalling)
self.visit_galaxy_url(url)
return galaxy.util.listify(repository_ids)