""" Global variables. """ from sqlite3 import Connection as SQLite3Connection from flask import make_response from sqlalchemy.engine import Engine from sqlalchemy import event from asl_articles import app from asl_articles.config.constants import APP_NAME, APP_VERSION # --------------------------------------------------------------------- # NOTE: You'd think we don't need to handle CORS issues, now that we're proxy'ing backend requests # via /api in the frontend, but the test suite still seems to need it :shrug: def _add_cors_headers( resp ): """Add the necessary headers to a response to allow CORS.""" resp.headers[ "Access-Control-Allow-Origin" ] = "*" resp.headers[ "Access-Control-Allow-Headers" ] = "Origin, Accept, Content-Type" return resp @app.after_request def after_request( resp ): """Post-process a response before it is returned to the caller.""" return _add_cors_headers( resp ) @app.errorhandler( Exception ) def handle_error( err ): """Post-process an error response before it is returned to the caller.""" orig_exc = getattr( err, "original_exception", None ) #pylint: disable=unused-variable try: resp = err.get_response() except AttributeError: resp = make_response( str(err), 500 ) return _add_cors_headers( resp ) # --------------------------------------------------------------------- @app.context_processor def inject_template_params(): """Inject template parameters into Jinja2.""" return { "APP_NAME": APP_NAME, "APP_VERSION": APP_VERSION, } @event.listens_for( Engine, "connect" ) def on_db_connect( dbapi_connection, connection_record ): #pylint: disable=unused-argument """Database connection callback.""" if isinstance( dbapi_connection, SQLite3Connection ): # foreign keys must be enabled manually for SQLite :-/ curs = dbapi_connection.cursor() curs.execute( "PRAGMA foreign_keys = ON" ) curs.close()