Skip to main content

Flask decorator to output RDF using content negotiation

Project description

A Flask or Bottle or WSGI decorator to output RDF using content negotiation.

Apply the @flask_rdf or @bottle_rdf or @wsgi_rdf decorator to a view function and return an rdflib Graph object. Flask_rdf will automatically format it into an RDF output format, depending on what the request’s Accept header says. If the view function returns something besides an rdflib graph, it will be passed through without modification.

Custom formats can be registered easily. After registering the new serializer with rdflib’s plugin support, use the add_format method to register a new mimetype request to use the new formatter.

The functionality of this module can still help other web frameworks, even if there isn’t a specific decorator yet. The format.decide function will return information about with Content-Type header to send and what serialization format to use with rdflib. The format.wants_rdf function can be used at a high level to determine whether the client even wants RDF.

API

  • add_format(mimetype, serialize_format), format.add_format(mimetype, serialize_format)

    Registers a new format to be recognized for content negotiation. It accepts arguments mimetype, serialize_format, and is used to add any custom rdflib serializer plugins to be used for the content negotiation. A third argument, requires_context, will restrict this serializer to only be used by graphs that are context_aware.

  • format.decide(accept, context_aware=False)

    Given an Accept header, return a (mimetype, format) tuple that would best satisfy the client’s request. If the Accept header is blank, default to RDF+XML If the Accept header can’t be satisfied, returns (None, None) A second argument, context_aware, may be used to allow formats that require a context_aware graph.

  • FormatSelector(), format.FormatSelector()

    Class to decide serialization formats. It supports using the module-level formats added with format.add_format, but it has its own list of formats added with FormatSelector().add_format.

  • wants_rdf(accept), format.wants_rdf(accept), FormatSelector.wants_rdf(accept)

    Returns whether the client’s Accept header indicates that the client is prepared to receive RDF data. This can be used in the view to return a pretty HTML page for browsers, for example.

  • @flask_rdf, @flask.returns_rdf

    Decorator for a Flask view function to use the Flask request’s Accept header. It handles converting an rdflib Graph object to the proper Flask response, depending on the content negotiation. Other content is returned without modification.

  • flask.Decorator

    Class to act as the decorator, in case some behavior needs to be overridden. The constructor accepts a FormatSelector object to do custom negotiation. The Decorator object itself can be used as the decorator, and it also supports the methods .output and .decorate.

  • @bottle_rdf, @bottle.returns_rdf

    Decorator for a Bottle view function to use the Bottle request’s Accept header. It handles converting an rdflib Graph object to the proper Bottle response, depending on the content negotiation. Other content is returned without modification.

  • bottle.Decorator

    Class to act as the decorator, in case some behavior needs to be overridden. The constructor accepts a FormatSelector object to do custom negotiation. The Decorator object itself can be used as the decorator, and it also supports the methods .output and .decorate.

  • @wsgi_rdf, @wsgi.returns_rdf

    Decorator for a WSGI app function to use the WSGI request’s Accept header. It handles converting an rdflib Graph object to the proper Bottle response, depending on the content negotiation. Other content is returned without modification. Calls to WSGI’s start_response will pass data through unchanged. Doing both a start_response and returning an RDF object will result in both outputs being returned, so don’t do that.

  • wsgi.Decorator

    Class to act as the decorator, in case some behavior needs to be overridden. The constructor accepts a FormatSelector object to do custom negotiation. The Decorator object itself can be used as the decorator, and it also supports the methods .output and .decorate.

Example

#!/usr/bin/env python
from rdflib import Graph, BNode, Literal, URIRef
from rdflib.namespace import FOAF
from flask import Flask
from flask_rdf.flask import returns_rdf
import random

app = Flask(__name__)

@app.route('/')
@app.route('/<path:path>')
@returns_rdf
def random_age(path=''):
    graph = Graph('IOMemory', BNode())
    graph.add((URIRef(path), FOAF.age, Literal(random.randint(20, 50))))
    return graph

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)
Build Status

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_rdf-0.2.1.tar.gz (6.9 kB view details)

Uploaded Source

Built Distributions

flask_rdf-0.2.1-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

flask_rdf-0.2.1-py2-none-any.whl (11.5 kB view details)

Uploaded Python 2

File details

Details for the file flask_rdf-0.2.1.tar.gz.

File metadata

  • Download URL: flask_rdf-0.2.1.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for flask_rdf-0.2.1.tar.gz
Algorithm Hash digest
SHA256 6848d4e53fa83117555803cb7d52cdea1a2fafd793898f59d19bfc64cf27db8b
MD5 a4d512037023c9cbec3635cf3898d080
BLAKE2b-256 fe6154f8df08295a50b4d464f90e864b823a513061ad48f945266948bffdddcb

See more details on using hashes here.

File details

Details for the file flask_rdf-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_rdf-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 90038a13bf848a76469d95876deb81763789de49c3b20f694dd84832ef399133
MD5 05b265dd758bce26ed660f9c5d3cd455
BLAKE2b-256 fc0620229336a39506ef1804644572bbc7bcb2d1b8cc7f1e4cdbe7a1e11ee893

See more details on using hashes here.

File details

Details for the file flask_rdf-0.2.1-py2-none-any.whl.

File metadata

File hashes

Hashes for flask_rdf-0.2.1-py2-none-any.whl
Algorithm Hash digest
SHA256 b71c4f403639bf6b5c082971e96caf4e05ddd0b93be55ad9a21850b83b256769
MD5 35fc9aa3e6ac9183e074f93ce446e44d
BLAKE2b-256 1f63a1332b215069d8f6b9f847be7c9aebe19c783954b3da94cdaab94317a631

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page