import logging import os from flask import Flask, jsonify from werkzeug.middleware.proxy_fix import ProxyFix import logging.config from common.extensions import (db, bootstrap, cors, csrf, session, minio_client, simple_encryption, metrics, cache_manager, content_manager) from common.models.user import Tenant, SpecialistMagicLinkTenant from common.utils.startup_eveai import perform_startup_actions from config.logging_config import LOGGING from eveai_chat_client.utils.errors import register_error_handlers from common.utils.celery_utils import make_celery, init_celery from common.utils.template_filters import register_filters from config.config import get_config def create_app(config_file=None): app = Flask(__name__, static_url_path='/static') # Ensure all necessary headers are handled app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_port=1) 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_client_' try: os.makedirs(app.instance_path) except OSError: pass logging.config.dictConfig(LOGGING) logger = logging.getLogger(__name__) logger.info("eveai_chat_client starting up") # Register extensions register_extensions(app) # Configure CSRF protection app.config['WTF_CSRF_CHECK_DEFAULT'] = False # Disable global CSRF protection app.config['WTF_CSRF_TIME_LIMIT'] = None # Remove time limit for CSRF tokens app.celery = make_celery(app.name, app.config) init_celery(app.celery, app) # Register Blueprints register_blueprints(app) # Register Error Handlers register_error_handlers(app) # Register Cache Handlers register_cache_handlers(app) # Debugging settings if app.config['DEBUG'] is True: app.logger.setLevel(logging.DEBUG) # Register template filters register_filters(app) # Perform startup actions such as cache invalidation perform_startup_actions(app) app.logger.info(f"EveAI Chat Client Started Successfully (PID: {os.getpid()})") app.logger.info("-------------------------------------------------------------------------------------------------") return app def register_extensions(app): db.init_app(app) bootstrap.init_app(app) csrf.init_app(app) cors.init_app(app) simple_encryption.init_app(app) session.init_app(app) minio_client.init_app(app) cache_manager.init_app(app) metrics.init_app(app) content_manager.init_app(app) def register_blueprints(app): from .views.chat_views import chat_bp app.register_blueprint(chat_bp) from .views.error_views import error_bp app.register_blueprint(error_bp) from .views.healthz_views import healthz_bp app.register_blueprint(healthz_bp) def register_cache_handlers(app): from common.utils.cache.config_cache import register_config_cache_handlers register_config_cache_handlers(cache_manager) from common.utils.cache.crewai_processed_config_cache import register_specialist_cache_handlers register_specialist_cache_handlers(cache_manager)