# main.py import eventlet eventlet.monkey_patch() import sys import os import logging from flask import Flask from flask_socketio import SocketIO # sys.path.append(os.path.dirname(__file__)) from app.di_container import Container from app.configs import Config, LoggerConfig from app.blueprints import ( auth_blueprint, user_blueprint, quiz_bp, default_blueprint, history_blueprint, subject_blueprint, session_bp, ) from app.database import init_db socketio = SocketIO(cors_allowed_origins="*") def createApp() -> Flask: app = Flask(__name__) app.config.from_object(Config) LoggerConfig.init_logger(app) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s" ) container = Container() app.container = container mongo = init_db(app) if mongo is not None: container.mongo.override(mongo) container.socketio.override(socketio) container.socket_controller() socketio.init_app(app) container.wire( modules=[ "app.blueprints.auth", "app.blueprints.user", "app.blueprints.quiz", "app.blueprints.history", "app.blueprints.subject", "app.blueprints.session", ] ) app.register_blueprint(default_blueprint) app.register_blueprint(auth_blueprint, url_prefix="/api") app.register_blueprint(user_blueprint, url_prefix="/api") app.register_blueprint(quiz_bp, url_prefix="/api/quiz") app.register_blueprint(history_blueprint, url_prefix="/api/history") app.register_blueprint(subject_blueprint, url_prefix="/api/subject") app.register_blueprint(session_bp, url_prefix="/api/session") return app