Source code for tool_shed.galaxy_install.grids.admin_toolshed_grids

import logging

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

log = logging.getLogger(__name__)


[docs]def generate_deprecated_repository_img_str(include_mouse_over=False): if include_mouse_over: deprecated_tip_str = 'class="icon-button" title="This repository is deprecated in the Tool Shed"' else: deprecated_tip_str = "" return f"<img src=\"{url_for('/static')}/images/icon_error_sml.gif\" {deprecated_tip_str}/>"
[docs]def generate_includes_workflows_img_str(include_mouse_over=False): if include_mouse_over: deprecated_tip_str = 'class="icon-button" title="This repository contains exported workflows"' else: deprecated_tip_str = "" return f"<img src=\"{url_for('/static')}/images/fugue/gear.png\" {deprecated_tip_str}/>"
[docs]def generate_latest_revision_img_str(include_mouse_over=False): if include_mouse_over: latest_revision_tip_str = ( 'class="icon-button" title="This is the latest installable revision of this repository"' ) else: latest_revision_tip_str = "" return f"<img src=\"{url_for('/static')}/style/ok_small.png\" {latest_revision_tip_str}/>"
[docs]def generate_revision_updates_img_str(include_mouse_over=False): if include_mouse_over: revision_updates_tip_str = ( 'class="icon-button" title="Updates are available in the Tool Shed for this revision"' ) else: revision_updates_tip_str = "" return f"<img src=\"{url_for('/static')}/images/icon_warning_sml.gif\" {revision_updates_tip_str}/>"
[docs]def generate_revision_upgrades_img_str(include_mouse_over=False): if include_mouse_over: revision_upgrades_tip_str = ( 'class="icon-button" title="A newer installable revision is available for this repository"' ) else: revision_upgrades_tip_str = "" return f"<img src=\"{url_for('/static')}/images/up.gif\" {revision_upgrades_tip_str}/>"
[docs]def generate_unknown_img_str(include_mouse_over=False): if include_mouse_over: unknown_tip_str = 'class="icon-button" title="Unable to get information from the Tool Shed"' else: unknown_tip_str = "" return f"<img src=\"{url_for('/static')}/style/question-octagon-frame.png\" {unknown_tip_str}/>"
[docs]class InstalledRepositoryGrid(grids.Grid):
[docs] class ToolShedStatusColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): if tool_shed_repository.tool_shed_status: tool_shed_status_str = "" if tool_shed_repository.is_deprecated_in_tool_shed: tool_shed_status_str += generate_deprecated_repository_img_str(include_mouse_over=True) if tool_shed_repository.is_latest_installable_revision: tool_shed_status_str += generate_latest_revision_img_str(include_mouse_over=True) if tool_shed_repository.revision_update_available: tool_shed_status_str += generate_revision_updates_img_str(include_mouse_over=True) if tool_shed_repository.upgrade_available: tool_shed_status_str += generate_revision_upgrades_img_str(include_mouse_over=True) if tool_shed_repository.includes_workflows: tool_shed_status_str += generate_includes_workflows_img_str(include_mouse_over=True) else: tool_shed_status_str = generate_unknown_img_str(include_mouse_over=True) return tool_shed_status_str
[docs] class NameColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return str(tool_shed_repository.name)
[docs] class DescriptionColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return util.unicodify(tool_shed_repository.description)
[docs] class OwnerColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return str(tool_shed_repository.owner)
[docs] class RevisionColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return str(tool_shed_repository.changeset_revision)
[docs] class StatusColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return repository_util.get_tool_shed_repository_status_label(trans.app, tool_shed_repository)
[docs] class ToolShedColumn(grids.TextColumn):
[docs] def get_value(self, trans, grid, tool_shed_repository): return tool_shed_repository.tool_shed
[docs] class DeletedColumn(grids.DeletedColumn):
[docs] def get_accepted_filters(self): """Returns a list of accepted filters for this column.""" accepted_filter_labels_and_vals = {"Active": "False", "Deactivated or uninstalled": "True", "All": "All"} accepted_filters = [] for label, val in accepted_filter_labels_and_vals.items(): args = {self.key: val} accepted_filters.append(grids.GridColumnFilter(label, args)) return accepted_filters
# Grid definition title = "Installed tool shed repositories" model_class = tool_shed_install.ToolShedRepository default_sort_key = "name" columns = [ ToolShedStatusColumn(label=""), NameColumn( label="Name", key="name", link=( lambda item: iff( item.status in [tool_shed_install.ToolShedRepository.installation_status.CLONING], None, dict(controller="admin_toolshed", action="manage_repository", id=item.id), ) ), target="center", attach_popup=True, ), DescriptionColumn(label="Description"), OwnerColumn(label="Owner"), RevisionColumn(label="Revision"), StatusColumn(label="Installation Status", filterable="advanced"), ToolShedColumn(label="Tool shed"), # Columns that are valid for filtering but are not visible. DeletedColumn(label="Status", key="deleted", visible=False, filterable="advanced"), ] columns.append( grids.MulticolFilterColumn( "Search repository name", cols_to_filter=[columns[1]], key="free-text-search", visible=False, filterable="standard", ) ) operations = [ grids.GridOperation( label="Update tool shed status", condition=(lambda item: not item.deleted), allow_multiple=False ), grids.GridOperation( label="Get updates", condition=( lambda item: not item.deleted and item.revision_update_available and item.status not in [ tool_shed_install.ToolShedRepository.installation_status.ERROR, tool_shed_install.ToolShedRepository.installation_status.NEW, ] ), allow_multiple=False, target="center", url_args=dict(controller="admin_toolshed", action="check_for_updates"), ), grids.GridOperation( label="Install latest revision", condition=(lambda item: item.upgrade_available), allow_multiple=False, target="center", url_args=dict(controller="admin_toolshed", action="install_latest_repository_revision"), ), grids.GridOperation( label="Install", condition=( lambda item: not item.deleted and item.status == tool_shed_install.ToolShedRepository.installation_status.NEW ), allow_multiple=False, target="center", url_args=dict(controller="admin_toolshed", action="manage_repository", operation="install"), ), grids.GridOperation( label="Deactivate or uninstall", condition=( lambda item: not item.deleted and item.status != tool_shed_install.ToolShedRepository.installation_status.NEW ), allow_multiple=True, target="center", url_args=dict(controller="admin_toolshed", action="deactivate_or_uninstall_repository"), ), grids.GridOperation( label="Activate or reinstall", condition=(lambda item: item.deleted), allow_multiple=False, target="center", url_args=dict(controller="admin_toolshed", action="restore_repository"), ), grids.GridOperation( label="Purge", condition=(lambda item: item.is_new), allow_multiple=False, target="center", url_args=dict(controller="admin_toolshed", action="purge_repository"), ), ] default_filter = dict(deleted="False") num_rows_per_page = 50 use_paging = False
[docs] def build_initial_query(self, trans, **kwd): return trans.install_model.context.query(self.model_class).order_by( self.model_class.table.c.tool_shed, self.model_class.table.c.name, self.model_class.table.c.owner, self.model_class.table.c.ctx_rev, )
@property def legend(self): legend_str = f"{generate_revision_updates_img_str()}&nbsp;&nbsp;Updates are available in the Tool Shed for this revision<br/>" legend_str += f"{generate_revision_upgrades_img_str()}&nbsp;&nbsp;A newer installable revision is available for this repository<br/>" legend_str += f"{generate_latest_revision_img_str()}&nbsp;&nbsp;This is the latest installable revision of this repository<br/>" legend_str += ( f"{generate_deprecated_repository_img_str()}&nbsp;&nbsp;This repository is deprecated in the Tool Shed<br/>" ) legend_str += ( f"{generate_includes_workflows_img_str()}&nbsp;&nbsp;This repository contains exported workflows<br/>" ) legend_str += f"{generate_unknown_img_str()}&nbsp;&nbsp;Unable to get information from the Tool Shed<br/>" return legend_str