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 common.extensions import db, migrate, bootstrap, security, mail, login_manager, cors from common.models.user import User, Role, Tenant, TenantDomain from config.logging_config import LOGGING from common.utils.security import set_tenant_session_data from .errors import register_error_handlers from common.utils.celery_utils import make_celery, 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.config.DevConfig') else: app.config.from_object(config_file) try: os.makedirs(app.instance_path) except OSError: pass logging.config.dictConfig(LOGGING) print(__name__) logger = logging.getLogger(__name__) logger.info("eveai_app starting up") # Register extensions register_extensions(app) app.celery = make_celery(app.name, app.config) init_celery(app.celery, app) print(app.celery.conf.broker_url) print(app.celery.conf.result_backend) # 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) # Register Error Handlers register_error_handlers(app) # Debugging settings 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')