""" Flask extensions initialization. This module centralizes the initialization of Flask extensions: - CORS (Cross-Origin Resource Sharing) - Rate limiting (Flask-Limiter) - Logging configuration """ import logging from flask import Flask from flask_cors import CORS from flask_limiter import Limiter from flask_limiter.util import get_remote_address # Initialize extensions (will be configured in app factory) cors = CORS() limiter = Limiter(key_func=get_remote_address) def init_cors(app: Flask, config) -> None: """ Initialize CORS with configuration. Args: app: Flask application instance config: Configuration object with CORS settings """ cors_origins = config.get_cors_origins() cors.init_app( app, origins=cors_origins, supports_credentials=True ) app.logger.info(f"CORS configured with origins: {cors_origins}") def init_limiter(app: Flask, config) -> None: """ Initialize rate limiter with configuration. Args: app: Flask application instance config: Configuration object with rate limiting settings """ # Configure rate limiting storage if config.REDIS_URL: limiter.init_app( app, storage_uri=config.REDIS_URL ) app.logger.info(f"Rate limiting configured with Redis: {config.REDIS_URL}") else: limiter.init_app(app) app.logger.info("Rate limiting configured with in-memory storage") def init_logging(app: Flask, config) -> None: """ Initialize logging configuration. Args: app: Flask application instance config: Configuration object with logging settings """ # Configure logging level and format logging.basicConfig( level=getattr(logging, config.LOG_LEVEL), format=config.LOG_FORMAT ) # Set Flask app logger level app.logger.setLevel(getattr(logging, config.LOG_LEVEL)) app.logger.info(f"Logging configured with level: {config.LOG_LEVEL}") def init_extensions(app: Flask, config) -> None: """ Initialize all Flask extensions. Args: app: Flask application instance config: Configuration object """ init_logging(app, config) init_cors(app, config) init_limiter(app, config) app.logger.info("All extensions initialized successfully")