-
Remco Tukker authoredRemco Tukker authored
__init__.py 1.32 KiB
"""
automatically invoked app factory
"""
import logging
import os
from flask import Flask
from flask_cors import CORS # for debugging
from compendium_v2 import config, environment
from compendium_v2.migrations import migration_utils
def migrate_database(config: dict) -> None:
dsn = config['SQLALCHEMY_DATABASE_URI']
migration_utils.upgrade(dsn)
def _create_app(app_config) -> Flask:
# used by sphinx to create documentation without config and db migrations
app = Flask(__name__)
CORS(app)
app.config['CONFIG_PARAMS'] = app_config
from compendium_v2.routes import default
app.register_blueprint(default.routes, url_prefix='/')
from compendium_v2.routes import api
app.register_blueprint(api.routes, url_prefix='/api')
return app
def create_app() -> Flask:
"""
overrides default settings with those found
in the file read from env var SETTINGS_FILENAME
:return: a new flask app instance
"""
assert 'SETTINGS_FILENAME' in os.environ, "environment variable 'SETTINGS_FILENAME' is required"
with open(os.environ['SETTINGS_FILENAME']) as f:
app_config = config.load(f)
app = _create_app(app_config)
logging.info('Flask app initialized')
environment.setup_logging()
# run migrations on startup
migrate_database(app_config)
return app