import ckan.plugins.toolkit as toolkit from flask import Blueprint from flask import request import ckan.views.feed as ckan_feed from ckan.common import config import ckan.lib.helpers as h import logging log = logging.getLogger(__name__) blueprint = Blueprint('odsh_feed', __name__) def custom(): extra_fields = ['ext_startdate', 'ext_enddate', 'ext_bbox', 'ext_prev_extent'] q = request.args.get(u'q', u'') fq = u'' search_params = {} extras = {} for (param, value) in request.args.items(): if param not in [u'q', u'page', u'sort'] + extra_fields \ and len(value) and not param.startswith('_'): search_params[param] = value fq += ' %s:"%s"' % (param, value) if param in extra_fields: extras[param] = value search_params['extras'] = extras page = h.get_page_number(request.args) limit = int(config.get('ckan.feeds.limit', 10)) data_dict: dict[str, Any] = { u'q': q, u'fq': fq, u'start': (page - 1) * limit, u'rows': limit, u'sort': request.args.get(u'sort', None), u'extras': extras } item_count, results = ckan_feed._package_search(data_dict) navigation_urls = ckan_feed._navigation_urls( request.args, item_count=item_count, limit=data_dict['rows'], named_route='feeds.custom') feed_url = ckan_feed._feed_url(request.args, named_route='feeds.custom') atom_url = h._url_with_params('/feeds/custom.atom', list(search_params.items())) alternate_url = ckan_feed._alternate_url(request.args) site_title = config.get('ckan.site_title', 'CKAN') return ckan_feed.output_feed(results, feed_title='%s - Custom query' % site_title, feed_description='Recently created or updated' ' datasets on %s. Custom query: \'%s\'' % (site_title, q), feed_link=alternate_url, feed_guid=ckan_feed._create_atom_id(atom_url), feed_url=feed_url, navigation_urls=navigation_urls)