import logging import os from flask import Flask from flask_security import SQLAlchemyUserDatastore from flask_security.signals import user_authenticated from werkzeug.middleware.proxy_fix import ProxyFix import logging.config from .extensions import db, migrate, bootstrap, security, mail, login_manager from .models.user import User, Tenant, Role from .models.document import Document, DocumentLanguage, DocumentVersion from .logging_config import LOGGING from .utils.security import set_tenant_session_data def create_app(config_file=None): app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1) if config_file is None: app.config.from_object('config.DevConfig') else: app.config.from_object(config_file) try: os.makedirs(app.instance_path) except OSError: pass logging.config.dictConfig(LOGGING) register_extensions(app) # Setup Flask-Security-Too user_datastore = SQLAlchemyUserDatastore(db, User, Role) security.init_app(app, user_datastore) user_authenticated.connect(set_tenant_session_data, app) # Register Blueprints register_blueprints(app) if app.config['DEBUG'] is True: app.logger.setLevel(logging.DEBUG) mail_logger = logging.getLogger('flask_mailman') mail_logger.setLevel(logging.DEBUG) security_logger = logging.getLogger('flask_security') security_logger.setLevel(logging.DEBUG) # Register API register_api(app) return app def register_extensions(app): db.init_app(app) migrate.init_app(app, db) bootstrap.init_app(app) mail.init_app(app) login_manager.init_app(app) # Register Blueprints def register_blueprints(app): from .views.user_views import user_bp app.register_blueprint(user_bp) def register_api(app): pass # from . import api # app.register_blueprint(api.bp, url_prefix='/api')