From 0dc03575691e4adac1f1bf1b6332a210fba062f4 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Thu, 19 Mar 2026 17:31:09 +0000 Subject: [PATCH 1/2] feat(views): resource search; - Dataset resource search view arg. --- ckan/views/dataset.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ckan/views/dataset.py b/ckan/views/dataset.py index df16c2bfdf7..7bf460e201a 100644 --- a/ckan/views/dataset.py +++ b/ckan/views/dataset.py @@ -8,6 +8,9 @@ from typing_extensions import TypeAlias from urllib.parse import urlencode from typing import Any, Iterable, Optional, Union, cast +# (canada fork only): resource search +# TODO: upstream contrib?? +from html import escape as html_escape from flask import Blueprint from flask.views import MethodView @@ -489,6 +492,20 @@ def read(package_type: str, id: str) -> Union[Response, str]: return h.redirect_to(u'{}.read'.format(package_type), id=pkg_dict['name']) + # (canada fork only): resource search + # TODO: upstream contrib?? + resource_query = request.args.get("resource_query") + if resource_query: + resource_query = html_escape(resource_query) + filtered_resources = [] + for res_dict in pkg_dict['resources']: + res_name = h.get_translated(res_dict, 'name') + if resource_query.lower() not in res_name.lower(): + continue + filtered_resources.append(res_dict) + pkg_dict['resources'] = filtered_resources + g.resource_query = resource_query + # can the resources be previewed? for resource in pkg_dict[u'resources']: resource_views = get_action(u'resource_view_list')( From bf93a33405cb2928c90acd5f76a154ac9fc6304e Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Thu, 19 Mar 2026 17:38:28 +0000 Subject: [PATCH 2/2] feat(misc): changelog; - Added change log file. --- changes/225.canada.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/225.canada.feature diff --git a/changes/225.canada.feature b/changes/225.canada.feature new file mode 100644 index 00000000000..da13230e758 --- /dev/null +++ b/changes/225.canada.feature @@ -0,0 +1 @@ +Added capability for the `dataset.read` view function to "search" a package's resources via the URI arg `resource_query`. It only searches by the resource names.