melody-backend / extensions.py
mfaydin's picture
Initial songformer deploy
77a71b4
Raw
History Blame Contribute Delete
2.36 kB
"""
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")