From 4bb9e6e7fd2918dd1ce8247a6bb5490a106e58b9 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 10 Nov 2023 16:05:58 +0300 Subject: [PATCH] Remove operation and legacy filtering logic from grid controller --- lib/galaxy/web/framework/helpers/grids.py | 79 +------------------ .../webapps/galaxy/controllers/admin.py | 74 +++-------------- 2 files changed, 11 insertions(+), 142 deletions(-) diff --git a/lib/galaxy/web/framework/helpers/grids.py b/lib/galaxy/web/framework/helpers/grids.py index 2ce9b39d937..dd5611f7e5f 100644 --- a/lib/galaxy/web/framework/helpers/grids.py +++ b/lib/galaxy/web/framework/helpers/grids.py @@ -1068,89 +1068,12 @@ class GridData: limit = kwargs.get("limit", 1000) offset = kwargs.get("offset", 0) - # Build a base filter and sort key that is the combination of the saved state and defaults. - # Saved state takes preference over defaults. - base_filter = {} - if self.default_filter: - # default_filter is a dictionary that provides a default set of filters based on the grid's columns. - base_filter = self.default_filter.copy() - base_sort_key = self.default_sort_key - # Build initial query query = self.build_initial_query(trans, **kwargs) query = self.apply_query_filter(trans, query, **kwargs) - # Determine whether use_default_filter flag is set. - use_default_filter_str = kwargs.get("use_default_filter") - use_default_filter = False - if use_default_filter_str: - use_default_filter = use_default_filter_str.lower() == "true" - - # Process filtering arguments to (a) build a query that represents the filter and (b) build a - # dictionary that denotes the current filter. - for column in self.columns: - if column.key: - # Get the filter criterion for the column. Precedence is (a) if using default filter, only look there; otherwise, - # (b) look in kwargs; and (c) look in base filter. - column_filter = None - if use_default_filter: - if self.default_filter: - column_filter = self.default_filter.get(column.key) - elif f"f-{column.model_class.__name__}.{column.key}" in kwargs: - # Queries that include table joins cannot guarantee unique column names. This problem is - # handled by setting the column_filter value to .. - column_filter = kwargs.get(f"f-{column.model_class.__name__}.{column.key}") - elif f"f-{column.key}" in kwargs: - column_filter = kwargs.get(f"f-{column.key}") - elif column.key in base_filter: - column_filter = base_filter.get(column.key) - - # Method (1) combines a mix of strings and lists of strings into a single string and (2) attempts to de-jsonify all strings. - def loads_recurse(item): - decoded_list = [] - if isinstance(item, str): - try: - # Not clear what we're decoding, so recurse to ensure that we catch everything. - decoded_item = loads(item) - if isinstance(decoded_item, list): - decoded_list = loads_recurse(decoded_item) - else: - decoded_list = [str(decoded_item)] - except ValueError: - decoded_list = [str(item)] - elif isinstance(item, list): - for element in item: - a_list = loads_recurse(element) - decoded_list = decoded_list + a_list - return decoded_list - - # If column filter found, apply it. - if column_filter is not None: - # TextColumns may have a mix of json and strings. - if isinstance(column, TextColumn): - column_filter = loads_recurse(column_filter) - if len(column_filter) == 1: - column_filter = column_filter[0] - # Interpret ',' as a separator for multiple terms. - if isinstance(column_filter, str) and column_filter.find(",") != -1: - column_filter = column_filter.split(",") - - # Check if filter is empty - if isinstance(column_filter, list): - # Remove empty strings from filter list - column_filter = [x for x in column_filter if x != ""] - if len(column_filter) == 0: - continue - elif isinstance(column_filter, str): - # If filter criterion is empty, do nothing. - if column_filter == "": - continue - - # Update query. - query = column.filter(trans, trans.user, query, column_filter) - # Process sort arguments. - sort_by = kwargs.get("sort_by", base_sort_key) + sort_by = kwargs.get("sort_by", self.default_sort_key) sort_desc = string_as_bool(kwargs.get("sort_desc", True)) for column in self.columns: if column.key == sort_by: diff --git a/lib/galaxy/webapps/galaxy/controllers/admin.py b/lib/galaxy/webapps/galaxy/controllers/admin.py index 6c2c341753e..83cbd8d2135 100644 --- a/lib/galaxy/webapps/galaxy/controllers/admin.py +++ b/lib/galaxy/webapps/galaxy/controllers/admin.py @@ -130,71 +130,17 @@ class UserListGrid(grids.GridData): model_class = model.User default_sort_key = "email" columns = [ - EmailColumn( - "Email", - key="email", - link=(lambda item: dict(controller="user", action="information", id=item.id, webapp="galaxy")), - attach_popup=True, - filterable="advanced", - target="top", - ), - UserNameColumn("User Name", key="username", attach_popup=False, filterable="advanced"), - LastLoginColumn("Last Login", format=time_ago, key="last_login", sortable=True), - DiskUsageColumn("Disk Usage", key="disk_usage", attach_popup=False), - StatusColumn("Status", attach_popup=False, key="status"), - TimeCreatedColumn("Created", attach_popup=False, key="create_time"), - ActivatedColumn("Activated", attach_popup=False, key="active"), - GroupsColumn("Groups", attach_popup=False, key="groups"), - RolesColumn("Roles", attach_popup=False, key="roles"), - ExternalColumn("External", attach_popup=False, key="external"), - # Columns that are valid for filtering but are not visible. - grids.DeletedColumn("Deleted", key="deleted", visible=False, filterable="advanced"), - grids.PurgedColumn("Purged", key="purged", visible=False, filterable="advanced"), + EmailColumn("Email", key="email"), + UserNameColumn("User Name", key="username"), + LastLoginColumn("Last Login", key="last_login", format=time_ago), + DiskUsageColumn("Disk Usage", key="disk_usage"), + StatusColumn("Status", key="status"), + TimeCreatedColumn("Created", key="create_time"), + ActivatedColumn("Activated", key="active"), + GroupsColumn("Groups", key="groups"), + RolesColumn("Roles", key="roles"), + ExternalColumn("External", key="external"), ] - 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", url_args=dict(action="users/create"))] - operations = [ - grids.GridOperation( - "Manage Information", - condition=(lambda item: not item.deleted), - allow_multiple=False, - url_args=dict(controller="user", action="information", webapp="galaxy"), - ), - grids.GridOperation( - "Manage Roles and Groups", - condition=(lambda item: not item.deleted), - allow_multiple=False, - url_args=dict(action="form/manage_roles_and_groups_for_user"), - ), - grids.GridOperation( - "Reset Password", - condition=(lambda item: not item.deleted), - allow_multiple=True, - url_args=dict(action="form/reset_user_password"), - target="top", - ), - grids.GridOperation("Recalculate Disk Usage", condition=(lambda item: not item.deleted), allow_multiple=False), - grids.GridOperation("Generate New API Key", allow_multiple=False, async_compatible=True), - ] - - 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")), - ] - num_rows_per_page = 50 - use_paging = True - default_filter = dict(purged="False") - use_default_filter = True def get_current_item(self, trans, **kwargs): return trans.user