65 lines
1.5 KiB
Python
65 lines
1.5 KiB
Python
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
|