import os from datetime import timedelta from dotenv import load_dotenv # Cargar variables de entorno desde archivo .env load_dotenv() class Config: """Configuración base para la aplicación.""" # Configuración de Flask SECRET_KEY = os.environ.get('SECRET_KEY') or 'clave-secreta-predeterminada' STORAGE_PATH = os.environ.get('STORAGE_PATH') or 'storage' # Configuración de sesión SESSION_TYPE = 'filesystem' SESSION_FILE_DIR = os.path.join(STORAGE_PATH, 'sessions') SESSION_PERMANENT = True PERMANENT_SESSION_LIFETIME = timedelta(hours=8) # Configuración de carga de archivos MAX_CONTENT_LENGTH = 100 * 1024 * 1024 # 100MB límite global UPLOAD_FOLDER = os.path.join(STORAGE_PATH, 'projects') # Configuración de caché CACHE_TYPE = 'SimpleCache' CACHE_DEFAULT_TIMEOUT = 300 # Configuración de logging LOG_DIR = os.path.join(STORAGE_PATH, 'logs') @staticmethod def init_app(app): """Inicialización adicional de la aplicación.""" # Asegurar que existen directorios necesarios os.makedirs(Config.SESSION_FILE_DIR, exist_ok=True) os.makedirs(Config.LOG_DIR, exist_ok=True) class DevelopmentConfig(Config): """Configuración para entorno de desarrollo.""" DEBUG = True class TestingConfig(Config): """Configuración para entorno de pruebas.""" TESTING = True STORAGE_PATH = 'test_storage' WTF_CSRF_ENABLED = False # Deshabilitar CSRF para pruebas class ProductionConfig(Config): """Configuración para entorno de producción.""" DEBUG = False TESTING = False @classmethod def init_app(cls, app): Config.init_app(app) # Configuración adicional para producción import logging from logging.handlers import RotatingFileHandler # Configurar handler para errores file_handler = RotatingFileHandler( os.path.join(cls.LOG_DIR, 'arch.log'), maxBytes=10 * 1024 * 1024, # 10MB backupCount=10 ) file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('ARCH inicializado') # Diccionario con las configuraciones disponibles config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig }