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 celery import Celery from .extensions import db, migrate, bootstrap, security, mail, login_manager, cors 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 from .worker.celery_utils import init_celery 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) sqlalchemy_logger = logging.getLogger('sqlalchemy.engine') sqlalchemy_logger.setLevel(logging.DEBUG) # sqlalchemy_logger.addHandler(logging.StreamHandler()) # 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) cors.init_app(app) # Register Blueprints def register_blueprints(app): from .views.user_views import user_bp app.register_blueprint(user_bp) from .views.basic_views import basic_bp app.register_blueprint(basic_bp) from .views.document_views import document_bp app.register_blueprint(document_bp) def register_api(app): pass # from . import api # app.register_blueprint(api.bp, url_prefix='/api') def create_celery_app(config_file=None): app = Flask(__name__) if config_file is None: app.config.from_object('config.DevConfig') else: app.config.from_object(config_file) celery = Celery(app.import_name) init_celery(celery, app) return celery celery = create_celery_app()