61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import os
|
|
import logging
|
|
import markdown
|
|
from markupsafe import Markup
|
|
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.INFO)
|
|
app.logger.addHandler(file_handler)
|
|
app.logger.setLevel(logging.INFO)
|
|
|
|
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
|
|
|
|
app.register_blueprint(main)
|
|
app.register_blueprint(slides_bp)
|
|
app.register_blueprint(admin_bp)
|
|
|
|
@app.template_filter('md')
|
|
def render_markdown(text):
|
|
if not text:
|
|
return ''
|
|
return Markup(markdown.markdown(text, extensions=['nl2br']))
|
|
|
|
return app
|