|
|
|
@@ -10,9 +10,6 @@ if os.environ.get("DEBUG", "false").lower() != "true": |
|
|
|
grpc.experimental.gevent.init_gevent() |
|
|
|
|
|
|
|
import json |
|
|
|
import logging |
|
|
|
import sys |
|
|
|
from logging.handlers import RotatingFileHandler |
|
|
|
|
|
|
|
from flask import Flask, Response, request |
|
|
|
from flask_cors import CORS |
|
|
|
@@ -27,6 +24,7 @@ from extensions import ( |
|
|
|
ext_compress, |
|
|
|
ext_database, |
|
|
|
ext_hosting_provider, |
|
|
|
ext_logging, |
|
|
|
ext_login, |
|
|
|
ext_mail, |
|
|
|
ext_migrate, |
|
|
|
@@ -70,43 +68,7 @@ def create_flask_app_with_configs() -> Flask: |
|
|
|
|
|
|
|
def create_app() -> Flask: |
|
|
|
app = create_flask_app_with_configs() |
|
|
|
|
|
|
|
app.secret_key = app.config["SECRET_KEY"] |
|
|
|
|
|
|
|
log_handlers = None |
|
|
|
log_file = app.config.get("LOG_FILE") |
|
|
|
if log_file: |
|
|
|
log_dir = os.path.dirname(log_file) |
|
|
|
os.makedirs(log_dir, exist_ok=True) |
|
|
|
log_handlers = [ |
|
|
|
RotatingFileHandler( |
|
|
|
filename=log_file, |
|
|
|
maxBytes=1024 * 1024 * 1024, |
|
|
|
backupCount=5, |
|
|
|
), |
|
|
|
logging.StreamHandler(sys.stdout), |
|
|
|
] |
|
|
|
|
|
|
|
logging.basicConfig( |
|
|
|
level=app.config.get("LOG_LEVEL"), |
|
|
|
format=app.config.get("LOG_FORMAT"), |
|
|
|
datefmt=app.config.get("LOG_DATEFORMAT"), |
|
|
|
handlers=log_handlers, |
|
|
|
force=True, |
|
|
|
) |
|
|
|
log_tz = app.config.get("LOG_TZ") |
|
|
|
if log_tz: |
|
|
|
from datetime import datetime |
|
|
|
|
|
|
|
import pytz |
|
|
|
|
|
|
|
timezone = pytz.timezone(log_tz) |
|
|
|
|
|
|
|
def time_converter(seconds): |
|
|
|
return datetime.utcfromtimestamp(seconds).astimezone(timezone).timetuple() |
|
|
|
|
|
|
|
for handler in logging.root.handlers: |
|
|
|
handler.formatter.converter = time_converter |
|
|
|
initialize_extensions(app) |
|
|
|
register_blueprints(app) |
|
|
|
register_commands(app) |
|
|
|
@@ -117,6 +79,7 @@ def create_app() -> Flask: |
|
|
|
def initialize_extensions(app): |
|
|
|
# Since the application instance is now created, pass it to each Flask |
|
|
|
# extension instance to bind it to the Flask application instance (app) |
|
|
|
ext_logging.init_app(app) |
|
|
|
ext_compress.init_app(app) |
|
|
|
ext_code_based_extension.init() |
|
|
|
ext_database.init_app(app) |