Source code for invenio_rest.ext
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2015-2018 CERN.
#
# Invenio is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
"""REST API module for Invenio."""
from __future__ import absolute_import, print_function
import pkg_resources
from . import config
from .views import create_api_errorhandler
[docs]class InvenioREST(object):
"""Invenio-REST extension."""
def __init__(self, app=None):
"""Extension initialization.
:param app: An instance of :class:`flask.Flask`.
"""
if app:
self.init_app(app)
[docs] def init_app(self, app):
"""Flask application initialization.
Initialize the Rate-Limiter, CORS and error handlers.
:param app: An instance of :class:`flask.Flask`.
"""
self.init_config(app)
# Enable CORS support if desired
if app.config['REST_ENABLE_CORS']:
from flask_cors import CORS
CORS(app)
# CORS can be configured using CORS_* configuration variables.
app.errorhandler(400)(create_api_errorhandler(
status=400, message='Bad Request'))
app.errorhandler(401)(create_api_errorhandler(
status=401, message='Unauthorized'))
app.errorhandler(403)(create_api_errorhandler(
status=403, message='Forbidden'))
app.errorhandler(404)(create_api_errorhandler(
status=404, message='Not Found'))
app.errorhandler(405)(create_api_errorhandler(
status=405, message='Method Not Allowed'))
app.errorhandler(406)(create_api_errorhandler(
status=406, message='Not Acceptable'))
app.errorhandler(409)(create_api_errorhandler(
status=409, message='Conflict'))
app.errorhandler(410)(create_api_errorhandler(
status=410, message='Gone'))
app.errorhandler(412)(create_api_errorhandler(
status=412, message='Precondition Failed'))
app.errorhandler(415)(create_api_errorhandler(
status=415, message='Unsupported media type'))
app.errorhandler(422)(create_api_errorhandler(
status=422, message='Unprocessable Entity'))
app.errorhandler(429)(create_api_errorhandler(
status=429, message='Rate limit exceeded'))
app.errorhandler(500)(create_api_errorhandler(
status=500, message='Internal Server Error'))
app.errorhandler(501)(create_api_errorhandler(
status=501, message='Not Implemented'))
app.errorhandler(502)(create_api_errorhandler(
status=502, message='Bad Gateway'))
app.errorhandler(503)(create_api_errorhandler(
status=503, message='Service Unavailable'))
app.errorhandler(504)(create_api_errorhandler(
status=504, message='Gateway Timeout'))
app.extensions['invenio-rest'] = self
[docs] def init_config(self, app):
"""Initialize configuration.
.. note:: Change Flask-CORS and Flask-Limiter defaults.
:param app: An instance of :class:`flask.Flask`.
"""
config_apps = ['REST_', 'CORS_', ]
for k in dir(config):
if any([k.startswith(prefix) for prefix in config_apps]):
app.config.setdefault(k, getattr(config, k))