From 6ff79f5d69381c8c1043c58e3f7671189ef6e309 Mon Sep 17 00:00:00 2001 From: nickpons666 Date: Fri, 20 Mar 2026 18:57:24 -0600 Subject: [PATCH] =?UTF-8?q?Fix:=20Descartar=20y=20eliminar=20del=20cach?= =?UTF-8?q?=C3=A9=20valores=20contaminados=20con=20mensajes=20de=20error?= =?UTF-8?q?=20(#12)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- botdiscord/translate.py | 6 +++--- panel/main.py | 21 +++++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/botdiscord/translate.py b/botdiscord/translate.py index 3aaab68..bee5fb0 100644 --- a/botdiscord/translate.py +++ b/botdiscord/translate.py @@ -129,10 +129,10 @@ async def translate_text(text: str, target_lang: str) -> str: translated_segments = await asyncio.gather(*tasks) result = "".join(translated_segments) - # Guardar en Redis por 24 horas - if result != text: + # No cachear mensajes de error + if result and result != text and "mantenimiento" not in result: cache_set(redis_key, result, ttl=86400) - return result + return result if result else text except Exception: return text diff --git a/panel/main.py b/panel/main.py index 7ca0b46..b492f91 100644 --- a/panel/main.py +++ b/panel/main.py @@ -51,20 +51,28 @@ def translate_filter(text, lang="es"): if not text: return "" cache_key = f"ui:{lang}:{text}" + _BAD = "mantenimiento" # Patron de respuesta de error a ignorar # 1. Redis (compartido y persistente entre reinicios) redis_val = cache_get(cache_key) - if redis_val: + if redis_val and _BAD not in redis_val: _ui_memory_cache[cache_key] = redis_val return redis_val + elif redis_val and _BAD in redis_val: + # Valor contaminado: eliminarlo del caché + from utils.cache import cache_delete + cache_delete(cache_key) # 2. RAM local (ultra rápida, temporal) - if cache_key in _ui_memory_cache: - return _ui_memory_cache[cache_key] + ram_val = _ui_memory_cache.get(cache_key) + if ram_val and _BAD not in ram_val: + return ram_val + elif cache_key in _ui_memory_cache: + del _ui_memory_cache[cache_key] # 3. Base de datos MySQL cached = get_ui_translation(text, lang) - if cached: + if cached and _BAD not in cached: _ui_memory_cache[cache_key] = cached cache_set(cache_key, cached, ttl=604800) # 7 días return cached @@ -73,12 +81,13 @@ def translate_filter(text, lang="es"): from botdiscord.translate import translate_text_sync translated = translate_text_sync(text, lang) - if translated and translated != text: + if translated and translated != text and _BAD not in translated: save_ui_translation(text, lang, translated) _ui_memory_cache[cache_key] = translated cache_set(cache_key, translated, ttl=604800) # 7 días + return translated - return translated + return text # Fallback: devolver el texto original si todo falla templates.env.filters["translate"] = translate_filter