import os import logging from logging.handlers import WatchedFileHandler from flask import Flask from flask_socketio import SocketIO from .models import db from .utils import init_password_generator, init_serializer from .auth import init_auth from .seed_db import seed_courses socketio = SocketIO(async_mode='eventlet', cors_allowed_origins="*") def create_app(): # 1. Setup Log Directory log_dir = os.path.join(os.getcwd(), 'logs') if not os.path.exists(log_dir): os.makedirs(log_dir) app = Flask(__name__, static_folder='static', static_url_path='/static') app.config.from_object('config.Config') file_handler = WatchedFileHandler(log_dir + '/app.log', mode='a', encoding='UTF-8') file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s [%(module)s:%(lineno)d]: %(message)s' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) db.init_app(app) with app.app_context(): db.create_all() seed_courses() init_password_generator() init_serializer(app) init_auth(app) socketio.init_app(app) from .routes import main app.register_blueprint(main) return app