Newer
Older
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
from flask import Blueprint
class CollectionsPlugin(plugins.SingletonPlugin, DefaultDatasetForm):
plugins.implements(plugins.IDatasetForm, inherit=True)
plugins.implements(plugins.ITemplateHelpers)
plugins.implements(plugins.IBlueprint)
# 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__)
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
# 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,
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')
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)
else:
toolkit.abort(404)