factory.py 1.18 KB
"""Application factory for the BettaFish web API."""

from __future__ import annotations

from pathlib import Path

from flask import Flask

from apps.web_api.bootstrap.blueprints import register_blueprints
from apps.web_api.bootstrap.logging import configure_runtime_environment, patch_eventlet_disconnect_logging
from apps.web_api.bootstrap.socketio import create_socketio
from services.shared.logging import bind_logger

PROJECT_ROOT = Path(__file__).resolve().parents[2]
STATIC_DIR = PROJECT_ROOT / "static"
TEMPLATE_DIR = PROJECT_ROOT / "templates"
SECRET_KEY = "Dedicated-to-creating-a-concise-and-versatile-public-opinion-analysis-platform"


def create_app() -> tuple[Flask, object]:
    """Create the Flask app and Socket.IO server."""
    configure_runtime_environment()
    patch_eventlet_disconnect_logging()
    startup_logger = bind_logger(source="web_api.factory")

    app = Flask(
        __name__,
        static_folder=str(STATIC_DIR),
        template_folder=str(TEMPLATE_DIR),
    )
    app.config["SECRET_KEY"] = SECRET_KEY

    socketio = create_socketio(app)
    register_blueprints(app)

    startup_logger.info("Web API application factory initialized")
    return app, socketio