"""
:copyright: © 2020 by the Lin team.
:license: MIT, see LICENSE for more details.
"""
import os
from dotenv import load_dotenv
from flask import Flask
from app.util.common import basedir
def register_blueprints(app):
from app.api.cms import create_cms
from app.api.v1 import create_v1
elb_prefix = os.getenv('ELB_PREFIX', '')
app.register_blueprint(create_v1(), url_prefix=f"{elb_prefix}/v1")
app.register_blueprint(create_cms(), url_prefix=f"{elb_prefix}/cms")
def register_cli(app):
from app.cli import db_cli, plugin_cli
app.cli.add_command(db_cli)
app.cli.add_command(plugin_cli)
def register_api(app):
from app.api import api
api.register(app)
def apply_cors(app):
from flask_cors import CORS
CORS(app)
def init_socketio(app):
from app.extension.notify.socketio import socketio
socketio.init_app(app, cors_allowed_origins="*")
def load_app_config(app):
"""
根据指定配置环境自动加载对应环境变量和配置类到app config
"""
env = app.config.get("ENV")
load_dotenv(os.path.join(basedir, ".{env}.env").format(env=env))
app.config.from_object("app.config.{env}.{Env}Config".format(env=env, Env=env.capitalize()))
def set_global_config(**kwargs):
from lin import global_config
for k, v in kwargs.items():
if k.startswith("config_"):
global_config[k[7:]] = v
def create_app(register_all=True, **kwargs):
set_global_config(**kwargs)
load_dotenv(os.path.join(basedir, ".flaskenv"))
app = Flask(__name__, static_folder=os.path.join(basedir, "assets"))
load_app_config(app)
if register_all:
from lin import Lin
register_blueprints(app)
register_api(app)
apply_cors(app)
init_socketio(app)
Lin(app, **kwargs)
register_cli(app)
return app