Skip to content
Snippets Groups Projects
controller.py 5.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • import ckan.lib.base as base
    from ckan.controllers.home import HomeController
    
    from ckan.controllers.user import UserController
    
    chbaeh's avatar
    chbaeh committed
    from ckan.controllers.api import ApiController
    from ckan.controllers.feed import FeedController
    
    chbaeh's avatar
    chbaeh committed
    from ckan.controllers.package import PackageController
    
    from ckan.controllers.feed import FeedController, ITEMS_LIMIT, _package_search, _create_atom_id
    
    import ckan.lib.helpers as h
    import ckan.authz as authz
    from ckan.common import c
    
    chbaeh's avatar
    chbaeh committed
    import logging
    import matomo 
    import ckan.logic as logic
    
    from ckan.common import c, request, config
    
    chbaeh's avatar
    chbaeh committed
    import hashlib
    
    
    abort = base.abort
    
    chbaeh's avatar
    chbaeh committed
    log = logging.getLogger(__name__)
    
    
    class OdshRouteController(HomeController):
        def info_page(self):
    
    chbaeh's avatar
    chbaeh committed
            h.redirect_to('http://www.schleswig-holstein.de/odpinfo')
    
    chbaeh's avatar
    chbaeh committed
        def start(self):
    
    chbaeh's avatar
    chbaeh committed
            h.redirect_to('http://www.schleswig-holstein.de/odpstart')
    
    chbaeh's avatar
    chbaeh committed
        def not_found(self):
            abort(404)
    
    
    class OdshUserController(UserController):
        def me(self, locale=None):
            if not c.user:
                h.redirect_to(locale=locale, controller='user', action='login',
                              id=None)
            user_ref = c.userobj.get_reference_preferred_for_uri()
            h.redirect_to(locale=locale, controller='package', action='search')
    
        def dashboard(self, id=None, offset=0):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).dashboard(id,offset)
    
    
        def dashboard_datasets(self):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).dashboard_datasets(id)
    
        def read(self, id=None):
            return super(OdshUserController,self).read(id)
    
        def follow(self, id):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).follow(id)
    
        def unfollow(self, id):
            if not authz.is_sysadmin(c.user):
                abort(404)
            return super(OdshUserController,self).unfollow(id)
    
        def activity(self, id, offset=0):
            if not authz.is_sysadmin(c.user):
                abort(404)
    
    chbaeh's avatar
    chbaeh committed
            return super(OdshUserController,self).activity(id, offset)
    
    class OdshPackageController(PackageController):
    
    chbaeh's avatar
    chbaeh committed
        pass
    
    class MamotoApiController(ApiController):
        def action(self, logic_function, ver=None):
            try:
                function = logic.get_action(logic_function)
                side_effect_free = getattr(function, 'side_effect_free', False)
                request_data = self._get_request_data(
                    try_url_params=side_effect_free)
                if isinstance(request_data, dict):
                    id = request_data.get('id', '')
                    if 'q' in request_data:
                        id = request_data['q']
                    if 'query' in request_data:
                        id = request_data['query']
    
    chbaeh's avatar
    chbaeh committed
                    userid=None
                    if c.user:
                        userid=hashlib.md5(c.user).hexdigest()[:16]
    
    chbaeh's avatar
    chbaeh committed
                    matomo.create_matomo_request(userid)
    
    chbaeh's avatar
    chbaeh committed
                else:
                    matomo.create_matomo_request()
    
    
    chbaeh's avatar
    chbaeh committed
            except Exception, e:
    
    chbaeh's avatar
    chbaeh committed
                log.error(e)
    
    chbaeh's avatar
    chbaeh committed
            
            return ApiController.action(self, logic_function, ver)
    
    
    class OdshFeedController(FeedController):
        def custom(self):
    
    chbaeh's avatar
    chbaeh committed
            matomo.create_matomo_request()
    
            extra_fields=['ext_startdate', 'ext_enddate', 'ext_bbox', 'ext_prev_extent']
            q = request.params.get('q', u'')
            fq = ''
            search_params = {}
            extras = {}
            for (param, value) in request.params.items():
                if param not in ['q', 'page', '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.params)
    
            limit = ITEMS_LIMIT
            data_dict = {
                'q': q,
                'fq': fq,
                'start': (page - 1) * limit,
                'rows': limit,
                'sort': request.params.get('sort', None),
                'extras': extras
            }
    
            item_count, results = _package_search(data_dict)
    
            navigation_urls = self._navigation_urls(request.params,
                                                    item_count=item_count,
                                                    limit=data_dict['rows'],
                                                    controller='feed',
                                                    action='custom')
    
            feed_url = self._feed_url(request.params,
                                      controller='feed',
                                      action='custom')
    
            atom_url = h._url_with_params('/feeds/custom.atom',
                                          search_params.items())
    
            alternate_url = self._alternate_url(request.params)
    
            site_title = config.get('ckan.site_title', 'CKAN')
    
            return self.output_feed(results,
                                    feed_title=u'%s - Custom query' % site_title,
                                    feed_description=u'Recently created or updated'
                                    ' datasets on %s. Custom query: \'%s\'' %
                                    (site_title, q),
                                    feed_link=alternate_url,
                                    feed_guid=_create_atom_id(atom_url),
                                    feed_url=feed_url,
                                    navigation_urls=navigation_urls)