86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
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
|
|
} |