Skip to content

Commit

Permalink
Pass extra vars to templates instead of adding to global object
Browse files Browse the repository at this point in the history
  • Loading branch information
bellisk committed Feb 3, 2025
1 parent 4960d85 commit 4370856
Showing 1 changed file with 63 additions and 64 deletions.
127 changes: 63 additions & 64 deletions ckanext/showcase/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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:
Expand All @@ -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(
Expand All @@ -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:
Expand All @@ -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)
Expand All @@ -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))
Expand All @@ -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']
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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(
Expand All @@ -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):
Expand Down Expand Up @@ -428,15 +427,15 @@ 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:
tk.abort(404, _('Showcase not found'))

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):
Expand All @@ -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'))
Expand All @@ -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')(
Expand All @@ -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')(
Expand All @@ -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",
Expand Down Expand Up @@ -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():
Expand Down Expand Up @@ -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():
Expand Down

0 comments on commit 4370856

Please sign in to comment.