import logging import logging.config import os import sys from flask import Flask, request from flask_bcrypt import Bcrypt from flask_cors import CORS from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() cors = CORS() bcrypt = Bcrypt() logging_config = { "version": 1, "formatters": { "json": { "class": "pythonjsonlogger.jsonlogger.JsonFormatter", "format": "%(asctime)s %(process)s %(levelname)s", } }, "handlers": { "console": { "level": "DEBUG", "class": "logging.StreamHandler", "formatter": "json", "stream": sys.stderr, } }, "root": {"level": "DEBUG", "handlers": ["console"], "propagate": True}, } logging.config.dictConfig(logging_config) logger = logging.getLogger(__name__) def create_app(script_info=None): app = Flask(__name__) app_settings = os.getenv("APP_SETTINGS") app.config.from_object(app_settings) db.init_app(app) cors.init_app(app, resources={r"*": {"origins": "*"}}) from src.api import api api.init_app(app) @app.shell_context_processor def ctx(): return {"app": app, "db": db} @app.after_request def log_info(response): logging_dict = {} logging_dict["request"] = {"path": request.path, "status": request.method} logging_dict["response"] = {"status": response.status} logging_dict["X-API-REQUEST-ID"] = request.headers.get("x-api-request-id") logger.info(logging_dict) return response return app