""" Flask application factory for chat platform backend. """ import os from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_jwt_extended import JWTManager from flask_cors import CORS from flask_socketio import SocketIO from flask_limiter import Limiter from flask_limiter.util import get_remote_address from redis import Redis from app.config import config_by_name db = SQLAlchemy() migrate = Migrate() jwt = JWTManager() socketio = SocketIO(cors_allowed_origins="*", async_mode="eventlet") limiter = Limiter(key_func=get_remote_address, default_limits=["200 per day", "50 per hour"]) def create_app(config_name=None): config_name = config_name or os.getenv("FLASK_ENV", "development") app = Flask(__name__) app.config.from_object(config_by_name[config_name]) CORS(app, resources={r"/api/*": {"origins": "*"}}, supports_credentials=True) db.init_app(app) migrate.init_app(app, db) jwt.init_app(app) limiter.init_app(app) socketio.init_app(app, message_queue=app.config.get("CELERY_BROKER_URL") or None) app.redis = Redis.from_url(app.config["REDIS_URL"]) if app.config.get("REDIS_URL") else None from app.api import register_blueprints register_blueprints(app) import app.socket_events # noqa: F401 - register SocketIO handlers from app.admin import init_admin init_admin(app) @app.route("/health") def health(): return {"status": "healthy"}, 200 return app