Newer
Older
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'],
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)