import os from datetime import timedelta class Config: """Base configuration""" SECRET_KEY = os.environ.get("SECRET_KEY") or "dev-secret-key-change-in-production" SQLALCHEMY_TRACK_MODIFICATIONS = False JWT_SECRET_KEY = os.environ["JWT_SECRET_KEY"] JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1) JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=30) CORS_ORIGINS = os.environ.get("CORS_ORIGINS", "*") # Celery Configuration CELERY = { "broker_url": os.environ.get("CELERY_BROKER_URL", "redis://redis:6379/0"), "result_backend": os.environ.get( "CELERY_RESULT_BACKEND", "redis://redis:6379/0" ), "task_serializer": "json", "result_serializer": "json", "accept_content": ["json"], "timezone": "UTC", "enable_utc": True, "task_track_started": True, "task_time_limit": 30 * 60, # 30 minutes "task_soft_time_limit": 25 * 60, # 25 minutes "worker_prefetch_multiplier": 1, "worker_max_tasks_per_child": 100, "broker_connection_retry_on_startup": True, } class DevelopmentConfig(Config): """Development configuration""" DEBUG = True SQLALCHEMY_DATABASE_URI = os.environ.get("DEV_DATABASE_URL") or "sqlite:///dev.db" class TestingConfig(Config): """Testing configuration""" TESTING = True SQLALCHEMY_DATABASE_URI = os.environ.get("TEST_DATABASE_URL") or "sqlite:///test.db" WTF_CSRF_ENABLED = False class ProductionConfig(Config): """Production configuration""" DEBUG = False SQLALCHEMY_DATABASE_URI = ( os.environ.get("DATABASE_URL") or "postgresql://user:password@localhost/proddb" ) # Security headers SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = "Lax" config_by_name = { "dev": DevelopmentConfig, "test": TestingConfig, "prod": ProductionConfig, }