import eventlet eventlet.monkey_patch() import sys import os import logging from flask import Flask, request from flask_socketio import SocketIO sys.path.append(os.path.dirname(__file__)) from di_container import Container from configs import Config, LoggerConfig from blueprints import ( auth_blueprint, user_blueprint, quiz_bp, default_blueprint, history_blueprint, subject_blueprint, socket, ) from database import init_db from controllers import SocketController socketio = SocketIO(cors_allowed_origins="*") def createApp() -> Flask: app = Flask(__name__) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s" ) app.config.from_object(Config) LoggerConfig.init_logger(app) container = Container() app.container = container mongo = init_db(app) if mongo is not None: container.mongo.override(mongo) SocketController(socketio) socketio.init_app(app) container.wire( modules=[ "blueprints.auth", "blueprints.user", "blueprints.quiz", "blueprints.history", "blueprints.subject", ] ) 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") return app if __name__ == "__main__": app = createApp() socketio.run(app, host="0.0.0.0", port=5000, debug=Config.DEBUG)