diff -r c87c3943d6ab -r a17cbf539a69 cubicweb/pyramid/rest_api.py --- a/cubicweb/pyramid/rest_api.py Tue Mar 10 23:44:45 2020 +0100 +++ b/cubicweb/pyramid/rest_api.py Tue Mar 10 23:47:50 2020 +0100 @@ -20,26 +20,44 @@ """Experimental REST API for CubicWeb using Pyramid.""" -from __future__ import absolute_import - +import rdflib from pyramid.view import view_config -from cubicweb.pyramid.resources import EntityResource, ETypeResource +from pyramid.response import Response + +from cubicweb import rdf +from cubicweb.pyramid.resources import rdf_context_from_eid, RDFResource @view_config( - route_name='cwentities', - context=EntityResource, - request_method='DELETE') -def delete_entity(context, request): - context.rset.one().cw_delete() - request.response.status_int = 204 - return request.response + route_name='one_entity', + context=RDFResource, +) +@view_config( + route_name='one_entity_eid', + context=RDFResource, +) +def view_entity_as_rdf(context, request): + graph = rdflib.ConjunctiveGraph() + rdf.add_entity_to_graph(graph, context.entity) + rdf_format = rdf.RDF_MIMETYPE_TO_FORMAT[context.mime_type] + response = Response(graph.serialize(format=rdf_format)) + response.content_type = context.mime_type + return response def includeme(config): config.include('.predicates') config.add_route( - 'cwentities', '/{etype}/*traverse', - factory=ETypeResource.from_match('etype'), match_is_etype='etype') + 'one_entity', + '/{etype}/{eid}', + factory=rdf_context_from_eid, + match_is_etype_and_eid=('etype', 'eid'), + ) + config.add_route( + 'one_entity_eid', + '/{eid}', + factory=rdf_context_from_eid, + match_is_eid='eid' + ) config.scan(__name__)