Files
tutor-tool/app/__init__.py

55 lines
1.6 KiB
Python

import os
import logging
from logging.handlers import WatchedFileHandler
from flask import Flask
from flask_socketio import SocketIO
from app.models import db
from app.utils import init_password_generator, init_serializer
from app.auth import init_auth
from app.seed_db import seed_courses
from app.config import Config
socketio = SocketIO(async_mode='eventlet', cors_allowed_origins="*", message_queue='redis://redis:6379')
def create_app(config_class=Config):
# 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_class)
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.DEBUG)
app.logger.addHandler(file_handler)
app.logger.setLevel(logging.DEBUG)
db.init_app(app)
with app.app_context():
db.create_all()
seed_courses()
db.engine.dispose()
init_password_generator()
init_serializer(app)
init_auth(app)
socketio.init_app(app)
from .routes import main
from .blueprints.slides import slides_bp
from .blueprints.admin import admin_bp
from .blueprints.grafana import grafana_bp
app.register_blueprint(main)
app.register_blueprint(slides_bp)
app.register_blueprint(admin_bp)
app.register_blueprint(grafana_bp)
return app