Source code for compiler.factory

"""Application factory for compiler service."""

import logging

from werkzeug.exceptions import Forbidden, Unauthorized, NotFound, \
    InternalServerError, BadRequest, HTTPException

from flask import Flask, jsonify, Response

from arxiv.base import Base
from arxiv.users import auth
from arxiv.base.middleware import wrap, request_logs
from arxiv import vault

from .services import Store, FileManager
from . import routes

from arxiv import vault


[docs]def jsonify_exception(error: HTTPException) -> Response: """Render exceptions as JSON.""" exc_resp = error.get_response() response: Response = jsonify(reason=error.description) response.status_code = exc_resp.status_code return response
[docs]def create_app() -> Flask: """Create an instance of the compiler service app.""" app = Flask(__name__) FileManager.init_app(app) Store.init_app(app) app.config.from_pyfile('config.py') Base(app) auth.Auth(app) app.register_blueprint(routes.blueprint) app.errorhandler(Forbidden)(jsonify_exception) app.errorhandler(Unauthorized)(jsonify_exception) app.errorhandler(BadRequest)(jsonify_exception) app.errorhandler(InternalServerError)(jsonify_exception) app.errorhandler(NotFound)(jsonify_exception) middleware = [auth.middleware.AuthMiddleware] if app.config['VAULT_ENABLED']: middleware.insert(0, vault.middleware.VaultMiddleware) wrap(app, middleware) return app