Skip to content
Snippets Groups Projects
plugin.py 2.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • from ckan.lib.plugins import DefaultDatasetForm
    
    import ckan.plugins as plugins
    import ckan.plugins.toolkit as toolkit
    
    from ckan.lib.helpers import is_url, url_for
    
    Thorge Petersen's avatar
    Thorge Petersen committed
    from . import helpers as collection_helpers
    
    from flask import Blueprint
    
    root's avatar
    root committed
    
    class CollectionsPlugin(plugins.SingletonPlugin, DefaultDatasetForm):
        plugins.implements(plugins.IDatasetForm, inherit=True)
        plugins.implements(plugins.ITemplateHelpers)
    
        plugins.implements(plugins.IBlueprint)
    
    root's avatar
    root committed
    
    
        # IDataSetForm
        def package_types(self):
            return ('collection', )
        
        def is_fallback(self):
            return False
    
        
        def read_template(self):
            return 'package/collection_read.html'
    
        # IBlueprint
        def get_blueprint(self):
            blueprint = Blueprint('odsh_collection', self.__module__)
    
    root's avatar
    root committed
    
    
            blueprint.add_url_rule('/collection/<id>/aktuell', 'latest_dataset', self.latest_dataset)
            blueprint.add_url_rule('/collection/<id>/aktuell.<resource_format>', 'latest_resource', self.latest_resource)
            return blueprint
    
    root's avatar
    root committed
    
    
        # ITemplateHelpers
        def get_helpers(self):
            # Template helper function names should begin with the name of the
            # extension they belong to, to avoid clashing with functions from
            # other extensions.
    
            return {
    
                'get_collection': collection_helpers.get_collection,
                'get_collection_info': collection_helpers.get_collection_info,
                'url_from_id': collection_helpers.url_from_id,
    
    root's avatar
    root committed
            }
    
    
        def latest_dataset(self, id):
            latest_dataset = collection_helpers.get_latest_dataset(id)
            if latest_dataset is None:
                toolkit.abort(404)
            return toolkit.redirect_to('dataset.read', id=latest_dataset)
    
    
        def latest_resource(self, id, resource_format):
            latest_resources = collection_helpers.get_latest_resources_for_format(id, resource_format)
            if latest_resources is None:
                toolkit.abort(404)
            url_type = latest_resources.get('url_type')
            if url_type is None:
                resource_url = latest_resources.get('url')
    
                return toolkit.redirect_to(resource_url)
    
            if url_type == 'upload':
                download_package_id = latest_resources.get('package_id')
                download_resource_id = latest_resources.get('id')
                pre_resource_url = latest_resources.get('url')
    
                if is_url(pre_resource_url):
    
                    url_resource = pre_resource_url
                else:
    
                    url_resource = url_for(named_route='dataset.resource_download',
    
                                           id=download_package_id,
                                           resource_id=download_resource_id,
                                           filename=pre_resource_url)
    
                return toolkit.redirect_to(url_resource)