class ComponentGrid(grids.Grid): class NameColumn(grids.TextColumn): def get_value(self, trans, grid, component): return escape(component.name) class DescriptionColumn(grids.TextColumn): def get_value(self, trans, grid, component): return escape(component.description) title = "Repository review components" model_class = model.Component template = '/webapps/tool_shed/repository_review/grid.mako' default_sort_key = "name" use_hide_message = False columns = [ NameColumn("Name", key="Component.name", link=(lambda item: dict(operation="edit", id=item.id)), attach_popup=False), DescriptionColumn("Description", key="Component.description", attach_popup=False) ] global_actions = [ grids.GridAction( "Add new component", dict(controller='repository_review', action='manage_components', operation='create')) ] num_rows_per_page = 50
class ManageCategoryGrid(CategoryGrid): columns = [col for col in CategoryGrid.columns] # Override the NameColumn to include an Edit link columns[0] = CategoryGrid.NameColumn("Name", key="Category.name", link=(lambda item: dict(operation="Edit", id=item.id)), model_class=model.Category, attach_popup=False) global_actions = [ grids.GridAction("Add new category", dict(controller='admin', action='manage_categories', operation='create')) ]
class GroupGrid(grids.Grid): class NameColumn(grids.TextColumn): def get_value(self, trans, grid, group): return str(group.name) class StatusColumn(grids.GridColumn): def get_value(self, trans, grid, group): if group.deleted: return "deleted" return "" class RolesColumn(grids.GridColumn): def get_value(self, trans, grid, group): if group.roles: return len(group.roles) return 0 class UsersColumn(grids.GridColumn): def get_value(self, trans, grid, group): if group.members: return len(group.members) return 0 title = "Groups" model_class = model.Group default_sort_key = "name" columns = [ NameColumn("Name", key="name", link=(lambda item: dict(operation="Manage users and roles", id=item.id)), attach_popup=True), UsersColumn("Users", attach_popup=False), RolesColumn("Roles", attach_popup=False), StatusColumn("Status", attach_popup=False), # Columns that are valid for filtering but are not visible. grids.DeletedColumn("Deleted", key="deleted", visible=False, filterable="advanced") ] columns.append(grids.MulticolFilterColumn("Search", cols_to_filter=[columns[0]], key="free-text-search", visible=False, filterable="standard")) global_actions = [ grids.GridAction("Add new group", dict(controller='admin', action='groups', operation='create')) ] operations = [grids.GridOperation("Rename", condition=(lambda item: not item.deleted), allow_multiple=False, url_args=dict(action="rename_group")), grids.GridOperation("Delete", condition=(lambda item: not item.deleted), allow_multiple=True, url_args=dict(action="mark_group_deleted")), grids.GridOperation("Undelete", condition=(lambda item: item.deleted), allow_multiple=True, url_args=dict(action="undelete_group")), grids.GridOperation("Purge", condition=(lambda item: item.deleted), allow_multiple=True, url_args=dict(action="purge_group"))] standard_filters = [ grids.GridColumnFilter("Active", args=dict(deleted=False)), grids.GridColumnFilter("Deleted", args=dict(deleted=True)), grids.GridColumnFilter("All", args=dict(deleted='All')) ] use_paging = False
class UserGrid(grids.Grid): class UserLoginColumn(grids.TextColumn): def get_value(self, trans, grid, user): return escape(user.email) class UserNameColumn(grids.TextColumn): def get_value(self, trans, grid, user): if user.username: return escape(user.username) return 'not set' class GroupsColumn(grids.GridColumn): def get_value(self, trans, grid, user): if user.groups: return len(user.groups) return 0 class RolesColumn(grids.GridColumn): def get_value(self, trans, grid, user): if user.roles: return len(user.roles) return 0 class ExternalColumn(grids.GridColumn): def get_value(self, trans, grid, user): if user.external: return 'yes' return 'no' class LastLoginColumn(grids.GridColumn): def get_value(self, trans, grid, user): if user.galaxy_sessions: return self.format(user.galaxy_sessions[0].update_time) return 'never' class StatusColumn(grids.GridColumn): def get_value(self, trans, grid, user): if user.purged: return "purged" elif user.deleted: return "deleted" return "" class EmailColumn(grids.GridColumn): def filter(self, trans, user, query, column_filter): if column_filter == 'All': return query return query.filter(and_(model.Tool.table.c.user_id == model.User.table.c.id, model.User.table.c.email == column_filter)) title = "Users" model_class = model.User default_sort_key = "email" columns = [ UserLoginColumn("Email", key="email", link=(lambda item: dict(operation="information", id=item.id)), attach_popup=True, filterable="advanced"), UserNameColumn("User Name", key="username", attach_popup=False, filterable="advanced"), GroupsColumn("Groups", attach_popup=False), RolesColumn("Roles", attach_popup=False), ExternalColumn("External", attach_popup=False), LastLoginColumn("Last Login", format=time_ago), StatusColumn("Status", attach_popup=False), # Columns that are valid for filtering but are not visible. EmailColumn("Email", key="email", visible=False) ] columns.append(grids.MulticolFilterColumn("Search", cols_to_filter=[columns[0], columns[1]], key="free-text-search", visible=False, filterable="standard")) global_actions = [ grids.GridAction("Create new user", dict(controller='admin', action='users', operation='create')) ] operations = [ grids.GridOperation("Manage Roles and Groups", condition=(lambda item: not item.deleted), allow_multiple=False, url_args=dict(action="manage_roles_and_groups_for_user")), grids.GridOperation("Reset Password", condition=(lambda item: not item.deleted), allow_multiple=True, allow_popup=False, url_args=dict(action="reset_user_password")) ] standard_filters = [ grids.GridColumnFilter("Active", args=dict(deleted=False)), grids.GridColumnFilter("Deleted", args=dict(deleted=True, purged=False)), grids.GridColumnFilter("Purged", args=dict(purged=True)), grids.GridColumnFilter("All", args=dict(deleted='All')) ] use_paging = False def get_current_item(self, trans, **kwargs): return trans.user
class RoleGrid(grids.Grid): class NameColumn(grids.TextColumn): def get_value(self, trans, grid, role): return escape(str(role.name)) class DescriptionColumn(grids.TextColumn): def get_value(self, trans, grid, role): if role.description: return str(role.description) return '' class TypeColumn(grids.TextColumn): def get_value(self, trans, grid, role): return str(role.type) class StatusColumn(grids.GridColumn): def get_value(self, trans, grid, role): if role.deleted: return "deleted" return "" class GroupsColumn(grids.GridColumn): def get_value(self, trans, grid, role): if role.groups: return len(role.groups) return 0 class RepositoriesColumn(grids.GridColumn): def get_value(self, trans, grid, role): if role.repositories: return len(role.repositories) return 0 class UsersColumn(grids.GridColumn): def get_value(self, trans, grid, role): if role.users: return len(role.users) return 0 title = "Roles" model_class = model.Role default_sort_key = "name" columns = [ NameColumn("Name", key="name", link=(lambda item: dict(operation="Manage role associations", id=item.id)), attach_popup=True, filterable="advanced"), DescriptionColumn("Description", key='description', attach_popup=False, filterable="advanced"), GroupsColumn("Groups", attach_popup=False), RepositoriesColumn("Repositories", attach_popup=False), UsersColumn("Users", attach_popup=False), # Columns that are valid for filtering but are not visible. grids.DeletedColumn("Deleted", key="deleted", visible=False, filterable="advanced") ] columns.append(grids.MulticolFilterColumn("Search", cols_to_filter=[columns[0]], key="free-text-search", visible=False, filterable="standard")) global_actions = [ grids.GridAction("Add new role", dict(controller='admin', action='roles', operation='create')) ] # Repository admin roles currently do not have any operations since they are managed automatically based # on other events. For example, if a repository is renamed, its associated admin role is automatically # renamed accordingly and if a repository is deleted its associated admin role is automatically deleted. operations = [grids.GridOperation("Rename", condition=(lambda item: not item.deleted and not item.is_repository_admin_role), allow_multiple=False, url_args=dict(action="rename_role")), grids.GridOperation("Delete", condition=(lambda item: not item.deleted and not item.is_repository_admin_role), allow_multiple=True, url_args=dict(action="mark_role_deleted")), grids.GridOperation("Undelete", condition=(lambda item: item.deleted and not item.is_repository_admin_role), allow_multiple=True, url_args=dict(action="undelete_role")), grids.GridOperation("Purge", condition=(lambda item: item.deleted and not item.is_repository_admin_role), allow_multiple=True, url_args=dict(action="purge_role"))] standard_filters = [ grids.GridColumnFilter("Active", args=dict(deleted=False)), grids.GridColumnFilter("Deleted", args=dict(deleted=True)), grids.GridColumnFilter("All", args=dict(deleted='All')) ] use_paging = False def apply_query_filter(self, trans, query, **kwd): return query.filter(model.Role.type != model.Role.types.PRIVATE)