From 104b1ae096de133412838e9af09f13296fe0e59b Mon Sep 17 00:00:00 2001 From: amercader Date: Wed, 8 Jan 2025 15:38:02 +0100 Subject: [PATCH] Add croissant endpoint at /dataset//croissant.jsonld --- ckanext/dcat/blueprints.py | 41 +++++++++++++++++++++++++++++--- ckanext/dcat/plugins/__init__.py | 6 +++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/ckanext/dcat/blueprints.py b/ckanext/dcat/blueprints.py index 4a12a3d3..957c9fae 100644 --- a/ckanext/dcat/blueprints.py +++ b/ckanext/dcat/blueprints.py @@ -1,13 +1,16 @@ # -*- coding: utf-8 -*- -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, make_response -from ckantoolkit import config +import ckantoolkit as toolkit from ckan.views.dataset import CreateView import ckan.plugins.toolkit as toolkit import ckanext.dcat.utils as utils -from ckanext.dcat.helpers import endpoints_enabled +from ckanext.dcat.helpers import endpoints_enabled, croissant as croissant_serialization + +config = toolkit.config + dcat = Blueprint( 'dcat', @@ -50,3 +53,35 @@ def dcat_json(): dcat_json_interface.add_url_rule(config.get('ckanext.dcat.json_endpoint', '/dcat.json'), view_func=dcat_json) + + +croissant = Blueprint('croissant', __name__) + + +def read_dataset_croissant(_id): + + try: + user_name = ( + toolkit.current_user.name + if hasattr(toolkit, "current_user") + else toolkit.g.user + ) + + context = { + 'user': user_name, + } + data_dict = {'id': _id} + + dataset_dict = toolkit.get_action("package_show")(context, data_dict) + except (toolkit.ObjectNotFound, toolkit.NotAuthorized): + return toolkit.abort( + 404, + toolkit._("Dataset not found or you have no permission to view it") + ) + + response = make_response(croissant_serialization(dataset_dict)) + response.headers["Content-type"] = "application/ld+json" + + return response + +croissant.add_url_rule('/dataset/<_id>/croissant.jsonld', view_func=read_dataset_croissant) diff --git a/ckanext/dcat/plugins/__init__.py b/ckanext/dcat/plugins/__init__.py index ad0b9fc5..c3944e47 100644 --- a/ckanext/dcat/plugins/__init__.py +++ b/ckanext/dcat/plugins/__init__.py @@ -264,6 +264,7 @@ class CroissantPlugin(p.SingletonPlugin): p.implements(p.IConfigurer, inherit=True) p.implements(p.ITemplateHelpers, inherit=True) + p.implements(p.IBlueprint) # IConfigurer @@ -276,3 +277,8 @@ def get_helpers(self): return { 'croissant': helpers.croissant, } + + # IBlueprint + + def get_blueprint(self): + return [blueprints.croissant]