Skip to content
Snippets Groups Projects
feed.py 2.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • Thorge Petersen's avatar
    Thorge Petersen committed
    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))
    
    Thorge Petersen's avatar
    Thorge Petersen committed
      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')
    
    Thorge Petersen's avatar
    Thorge Petersen committed
    
      feed_url = ckan_feed._feed_url(request.args,
    
                                named_route='feeds.custom')
    
    Thorge Petersen's avatar
    Thorge Petersen committed
    
      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)