from typing import Optional from flask import Flask, app from flask_socketio import SocketIO from flask_login import LoginManager from .db import close_db, init_db from app.models.user import User sIO = SocketIO() login_manager = LoginManager() @login_manager.user_loader def load_user(user_id: int | str) -> Optional["User"]: return User.get(user_id) def create_app(): app = Flask(__name__) app.config['SECRET_KEY'] = 'dev' #! ofc not intended for prod use from .sockets import socket as _socket app.teardown_appcontext(close_db) sIO.init_app(app) login_manager.init_app(app) login_manager.login_view = "auth.login" # type: ignore from .routes.auth import auth_bp from .routes.main import main_bp from .routes.friends import friends_bp from .routes.presence import presence_bp app.register_blueprint(main_bp) app.register_blueprint(auth_bp) app.register_blueprint(friends_bp) app.register_blueprint(presence_bp) init_db(app) return app