From 4370856b6cdb4260246eb035d4c3e3caaf24d93a Mon Sep 17 00:00:00 2001 From: Rae Knowler Date: Mon, 3 Feb 2025 16:02:29 +0100 Subject: [PATCH] Pass extra vars to templates instead of adding to global object --- ckanext/showcase/utils.py | 127 +++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/ckanext/showcase/utils.py b/ckanext/showcase/utils.py index 003d030..e078f3c 100644 --- a/ckanext/showcase/utils.py +++ b/ckanext/showcase/utils.py @@ -73,22 +73,23 @@ def read_view(id): # check if showcase exists try: - tk.g.pkg_dict = tk.get_action('package_show')(context, data_dict) + pkg_dict = tk.get_action('package_show')(context, data_dict) except tk.ObjectNotFound: return tk.abort(404, _('Showcase not found')) except tk.NotAuthorized: return tk.abort(401, _('Unauthorized to read showcase')) # get showcase packages - tk.g.showcase_pkgs = tk.get_action('ckanext_showcase_package_list')( + showcase_pkgs = tk.get_action('ckanext_showcase_package_list')( context, { - 'showcase_id': tk.g.pkg_dict['id'] + 'showcase_id': pkg_dict['id'] }) package_type = DATASET_TYPE_NAME return tk.render('showcase/read.html', extra_vars={'dataset_type': package_type, - 'pkg_dict': tk.g.pkg_dict,}) + 'pkg_dict': pkg_dict, + 'showcase_pkgs': showcase_pkgs}) def manage_datasets_view(id): @@ -110,7 +111,7 @@ def manage_datasets_view(id): # check if showcase exists try: - tk.g.pkg_dict = tk.get_action('package_show')(context, data_dict) + pkg_dict = tk.get_action('package_show')(context, data_dict) except tk.ObjectNotFound: return tk.abort(404, _('Showcase not found')) except tk.NotAuthorized: @@ -132,7 +133,7 @@ def manage_datasets_view(id): for dataset_id in dataset_ids: tk.get_action('ckanext_showcase_package_association_delete')( context, { - 'showcase_id': tk.g.pkg_dict['id'], + 'showcase_id': pkg_dict['id'], 'package_id': dataset_id }) h.flash_success( @@ -159,7 +160,7 @@ def manage_datasets_view(id): tk.get_action( 'ckanext_showcase_package_association_create')( context, { - 'showcase_id': tk.g.pkg_dict['id'], + 'showcase_id': pkg_dict['id'], 'package_id': dataset_id }) except tk.ValidationError as e: @@ -175,23 +176,16 @@ def manage_datasets_view(id): url = h.url_for(manage_route, id=id) return h.redirect_to(url) - _add_dataset_search(tk.g.pkg_dict['id'], tk.g.pkg_dict['name']) + extra_vars = _add_dataset_search(pkg_dict['id'], pkg_dict['name']) # get showcase packages - tk.g.showcase_pkgs = tk.get_action('ckanext_showcase_package_list')( + showcase_pkgs = tk.get_action('ckanext_showcase_package_list')( context, { - 'showcase_id': tk.g.pkg_dict['id'] + 'showcase_id': pkg_dict['id'] }) - extra_vars = { - 'facet_titles': tk.g.facet_titles, - 'fields_grouped': tk.g.fields_grouped, - 'page': tk.g.page, - 'pkg_dict': tk.g.pkg_dict, - 'remove_field': tk.g.remove_field, - 'search_facets': tk.g.search_facets, - 'showcase_pkgs': tk.g.showcase_pkgs - } + extra_vars['pkg_dict'] = pkg_dict + extra_vars['showcase_pkgs'] = showcase_pkgs return tk.render('showcase/manage_datasets.html', extra_vars=extra_vars) @@ -205,10 +199,11 @@ def _add_dataset_search(showcase_id, showcase_name): from ckan.lib.search import SearchError package_type = 'dataset' + extra_vars = {} # unicode format (decoded from utf8) - q = tk.g.q = tk.request.args.get('q', '') - tk.g.query_error = False + extra_vars['q'] = q = tk.request.args.get('q', '') + extra_vars['query_error'] = False page = h.get_page_number(tk.request.args) limit = int(tk.config.get('ckan.datasets_per_page', 20)) @@ -225,7 +220,7 @@ def remove_field(key, value=None, replace=None): tk.check_ckan_version('2.9') else 'package', action='search') - tk.g.remove_field = remove_field + extra_vars['remove_field'] = remove_field sort_by = tk.request.args.get('sort', None) params_nosort = [(k, v) for k, v in params_nopage if k != 'sort'] @@ -247,39 +242,42 @@ def _sort_by(fields): params.append(('sort', sort_string)) return _search_url(params, showcase_name) - tk.g.sort_by = _sort_by + extra_vars['sort_by'] = _sort_by if sort_by is None: - tk.g.sort_by_fields = [] + extra_vars['sort_by_fields'] = [] else: - tk.g.sort_by_fields = [field.split()[0] for field in sort_by.split(',')] + extra_vars['sort_by_fields'] = [field.split()[0] for field in sort_by.split(',')] def pager_url(q=None, page=None): params = list(params_nopage) params.append(('page', page)) return _search_url(params, showcase_name) - tk.g.search_url_params = urlencode(_encode_params(params_nopage)) + extra_vars['search_url_params'] = urlencode(_encode_params(params_nopage)) try: - tk.g.fields = [] - # tk.g.fields_grouped will contain a dict of params containing + fields = [] + # fields_grouped will contain a dict of params containing # a list of values eg {'tags':['tag1', 'tag2']} - tk.g.fields_grouped = {} + fields_grouped = {} search_extras = {} fq = '' for (param, value) in tk.request.args.items(): if param not in ['q', 'page', 'sort'] \ and len(value) and not param.startswith('_'): if not param.startswith('ext_'): - tk.g.fields.append((param, value)) + fields.append((param, value)) fq += ' %s:"%s"' % (param, value) - if param not in tk.g.fields_grouped: - tk.g.fields_grouped[param] = [value] + if param not in fields_grouped: + fields_grouped[param] = [value] else: - tk.g.fields_grouped[param].append(value) + fields_grouped[param].append(value) else: search_extras[param] = value + extra_vars['fields'] = fields + extra_vars['fields_grouped'] = fields_grouped + context = { 'model': model, 'session': model.Session, @@ -346,7 +344,7 @@ def pager_url(q=None, page=None): for plugin in p.PluginImplementations(p.IFacets): facets = plugin.dataset_facets(facets, package_type) - tk.g.facet_titles = facets + extra_vars['facet_titles'] = facets data_dict = { 'q': q, @@ -359,24 +357,24 @@ def pager_url(q=None, page=None): } query = tk.get_action('package_search')(context, data_dict) - tk.g.sort_by_selected = query['sort'] + extra_vars['sort_by_selected'] = query['sort'] - tk.g.page = h.Page(collection=query['results'], + extra_vars['page'] = h.Page(collection=query['results'], page=page, url=pager_url, item_count=query['count'], items_per_page=limit) - tk.g.facets = query['facets'] - tk.g.search_facets = query['search_facets'] - tk.g.page.items = query['results'] + extra_vars['facets'] = query['facets'] + extra_vars['search_facets'] = query['search_facets'] + extra_vars['page.items'] = query['results'] except SearchError as se: log.error('Dataset search error: %r', se.args) - tk.g.query_error = True - tk.g.facets = {} - tk.g.search_facets = {} - tk.g.page = h.Page(collection=[]) - tk.g.search_facets_limits = {} - for facet in tk.g.search_facets.keys(): + extra_vars['query_error'] = True + extra_vars['facets'] = {} + extra_vars['search_facets'] = {} + extra_vars['page'] = h.Page(collection=[]) + extra_vars['search_facets_limits'] = {} + for facet in extra_vars['search_facets'].keys(): try: limit = int( tk.request.args.get( @@ -387,7 +385,8 @@ def pager_url(q=None, page=None): 400, _("Parameter '{parameter_name}' is not an integer").format( parameter_name='_%s_limit' % facet)) - tk.g.search_facets_limits[facet] = limit + extra_vars['search_facets_limits'][facet] = limit + return extra_vars def _search_url(params, name): @@ -428,7 +427,7 @@ def delete_view(id): tk.get_action('ckanext_showcase_delete')(context, {'id': id}) h.flash_notice(_('Showcase has been deleted.')) return tk.redirect_to(index_route) - tk.g.pkg_dict = tk.get_action('package_show')(context, {'id': id}) + pkg_dict = tk.get_action('package_show')(context, {'id': id}) except tk.NotAuthorized: tk.abort(401, _('Unauthorized to delete showcase')) except tk.ObjectNotFound: @@ -436,7 +435,7 @@ def delete_view(id): return tk.render('showcase/confirm_delete.html', extra_vars={'dataset_type': DATASET_TYPE_NAME, - 'pkg_dict': tk.g.pkg_dict}) + 'pkg_dict': pkg_dict}) def dataset_showcase_list(id): @@ -457,10 +456,10 @@ def dataset_showcase_list(id): return tk.abort(401, _('Not authorized to see this page')) try: - tk.g.pkg_dict = tk.get_action('package_show')(context, data_dict) - tk.g.showcase_list = tk.get_action('ckanext_package_showcase_list')( + pkg_dict = tk.get_action('package_show')(context, data_dict) + showcase_list = tk.get_action('ckanext_package_showcase_list')( context, { - 'package_id': tk.g.pkg_dict['id'] + 'package_id': pkg_dict['id'] }) except tk.ObjectNotFound: return tk.abort(404, _('Dataset not found')) @@ -477,7 +476,7 @@ def dataset_showcase_list(id): if new_showcase: data_dict = { "showcase_id": new_showcase, - "package_id": tk.g.pkg_dict['id'] + "package_id": pkg_dict['id'] } try: tk.get_action('ckanext_showcase_package_association_create')( @@ -493,7 +492,7 @@ def dataset_showcase_list(id): if showcase_to_remove: data_dict = { "showcase_id": showcase_to_remove, - "package_id": tk.g.pkg_dict['id'] + "package_id": pkg_dict['id'] } try: tk.get_action('ckanext_showcase_package_association_delete')( @@ -504,19 +503,19 @@ def dataset_showcase_list(id): h.flash_success( _("The dataset has been removed from the showcase.")) return h.redirect_to( - h.url_for(list_route, id=tk.g.pkg_dict['name'])) + h.url_for(list_route, id=pkg_dict['name'])) - pkg_showcase_ids = [showcase['id'] for showcase in tk.g.showcase_list] + pkg_showcase_ids = [showcase['id'] for showcase in showcase_list] site_showcases = tk.get_action('ckanext_showcase_list')(context, {}) - tk.g.showcase_dropdown = [[showcase['id'], showcase['title']] + showcase_dropdown = [[showcase['id'], showcase['title']] for showcase in site_showcases if showcase['id'] not in pkg_showcase_ids] extra_vars = { - 'pkg_dict': tk.g.pkg_dict, - 'showcase_dropdown': tk.g.showcase_dropdown, - 'showcase_list': tk.g.showcase_list, + 'pkg_dict': pkg_dict, + 'showcase_dropdown': showcase_dropdown, + 'showcase_list': showcase_list, } return tk.render("package/dataset_showcase_list.html", @@ -557,10 +556,10 @@ def manage_showcase_admins(): return tk.redirect_to(h.url_for(admins_route)) - tk.g.showcase_admins = tk.get_action('ckanext_showcase_admin_list')({},{}) + showcase_admins = tk.get_action('ckanext_showcase_admin_list')({},{}) return tk.render('admin/manage_showcase_admins.html', - extra_vars={'showcase_admins': tk.g.showcase_admins}) + extra_vars={'showcase_admins': showcase_admins}) def remove_showcase_admin(): @@ -600,9 +599,9 @@ def remove_showcase_admin(): return tk.redirect_to(h.url_for(admins_route)) - tk.g.user_dict = tk.get_action('user_show')({}, {'id': user_id}) - tk.g.user_id = user_id - return tk.render('admin/confirm_remove_showcase_admin.html') + user_dict = tk.get_action('user_show')({}, {'id': user_id}) + return tk.render('admin/confirm_remove_showcase_admin.html', + extra_vars={'user_dict': user_dict, 'user_id': user_id}) def markdown_to_html():