import logging import logging.config from flask import Flask, jsonify import os from common.extensions import db, socketio, jwt, cors, session, simple_encryption, metrics from config.logging_config import LOGGING from eveai_chat.socket_handlers import chat_handler from common.utils.cors_utils import create_cors_after_request from common.utils.celery_utils import make_celery, init_celery from config.config import get_config def create_app(config_file=None): app = Flask(__name__) environment = os.getenv('FLASK_ENV', 'development') match environment: case 'development': app.config.from_object(get_config('dev')) case 'production': app.config.from_object(get_config('prod')) case _: app.config.from_object(get_config('dev')) app.config['SESSION_KEY_PREFIX'] = 'eveai_chat_' logging.config.dictConfig(LOGGING) register_extensions(app) app.celery = make_celery(app.name, app.config) init_celery(app.celery, app) app.logger.info("EveAI Chat Server Started Successfully") app.logger.info("-------------------------------------------------------------------------------------------------") return app def register_extensions(app): db.init_app(app) socketio.init_app(app, message_queue=app.config.get('SOCKETIO_MESSAGE_QUEUE'), cors_allowed_origins=app.config.get('SOCKETIO_CORS_ALLOWED_ORIGINS'), async_mode=app.config.get('SOCKETIO_ASYNC_MODE'), logger=app.config.get('SOCKETIO_LOGGER'), engineio_logger=app.config.get('SOCKETIO_ENGINEIO_LOGGER'), path='/socket.io/', ping_timeout=app.config.get('SOCKETIO_PING_TIMEOUT'), ping_interval=app.config.get('SOCKETIO_PING_INTERVAL'), ) jwt.init_app(app) simple_encryption.init_app(app) metrics.init_app(app) # Cors setup cors.init_app(app, resources={r"/chat/*": {"origins": "*"}}) app.after_request(create_cors_after_request('/chat')) session.init_app(app) def register_blueprints(app): from views.healthz_views import healthz_bp app.register_blueprint(healthz_bp)