From 0a98461c4e041c886c439e27462a910343a148a9 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 5 Aug 2026 09:38:20 -0500 Subject: [PATCH] Actualizar backend/data_manager_v2.py --- backend/data_manager_v2.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/backend/data_manager_v2.py b/backend/data_manager_v2.py index 29a63e9..9ee8230 100644 --- a/backend/data_manager_v2.py +++ b/backend/data_manager_v2.py @@ -1,6 +1,7 @@ # backend/data_manager.py (v2 - reescrito completo) """Capa de acceso a datos del módulo LEADS.""" import os +import time import requests from dotenv import load_dotenv @@ -106,15 +107,18 @@ CAMPANIAS = [ ('⛱️ Me interesa el programa de Refrigeración comercial', 'TERC', '266', 'Lima', 'Sabado', 'Pauta_wsp', '2026-05-15', '2026-08-30'), ('¡Hola! Vengo de su web, quiero saber', 'TEAC', '0', 'Lima', '-', 'Web_Whatsapp', '2025-11-01', '2026-12-31'), ] -# Cache en memoria de las campañas leídas de Supabase +# Cache en memoria de las campañas leídas de Supabase (expira cada 15 min, +# igual que el resto del dashboard). Así las campañas nuevas aparecen solas +# sin reiniciar el servidor. _CAMPANIAS_CACHE = None - - +_CAMPANIAS_TS = 0.0 +_CAMPANIAS_TTL = 900 # 15 min def _campanias_supabase(): """Lee las campañas desde la tabla 'campanias' de Supabase. - Si falla o está vacía, cae a la lista hardcodeada CAMPANIAS como respaldo.""" - global _CAMPANIAS_CACHE - if _CAMPANIAS_CACHE is not None: + Si falla o está vacía, cae a la lista hardcodeada CAMPANIAS como respaldo. + El cache expira cada 15 min para tomar campañas nuevas sin reiniciar.""" + global _CAMPANIAS_CACHE, _CAMPANIAS_TS + if _CAMPANIAS_CACHE is not None and (time.time() - _CAMPANIAS_TS < _CAMPANIAS_TTL): return _CAMPANIAS_CACHE url = os.getenv("CARTERA_URL") or os.getenv("SUPABASE_PAUTA_URL", "") key = os.getenv("CARTERA_KEY") or os.getenv("SUPABASE_PAUTA_KEY", "") @@ -144,8 +148,17 @@ def _campanias_supabase(): print("[_campanias_supabase] sin datos de Supabase -> uso lista hardcodeada") out = list(CAMPANIAS) _CAMPANIAS_CACHE = out + _CAMPANIAS_TS = time.time() return out + +def invalidar_campanias_cache(): + """Vacía el cache de campañas para forzar re-lectura de Supabase en la + próxima llamada. Se invoca desde refrescar_todo() cada 15 min.""" + global _CAMPANIAS_CACHE, _CAMPANIAS_TS + _CAMPANIAS_CACHE = None + _CAMPANIAS_TS = 0.0 + def _values_sql(): """Construye el bloque VALUES (...) del mapa de campañas para el JOIN.""" filas = []