Calc/debug_user_issues.py

100 lines
3.7 KiB
Python

#!/usr/bin/env python3
"""
Diagnóstico de problemas específicos del usuario:
1. IP4Mask(mask) no funciona
2. 10.1.1.1 + 1 devuelve Integer en lugar de FourBytes
"""
if __name__ == "__main__":
print("🔍 DIAGNOSTICANDO PROBLEMAS ESPECÍFICOS DEL USUARIO")
print("=" * 60)
try:
from main_evaluation import HybridEvaluationEngine
# Crear motor con debug
engine = HybridEvaluationEngine()
engine.debug = True
print("📋 Reproduciendo secuencia del usuario:")
# 1. Crear mask
print(f"\n1. Creando mask:")
result1 = engine.evaluate_line("mask=255.240.0.3")
print(f" mask asignada: {result1.result} (tipo: {type(result1.result)})")
# Ver qué hay en mask
mask_value = engine.get_variable('mask')
print(f" mask en symbol_table: {mask_value} (tipo: {type(mask_value)})")
print(f"\n2. Problema 1: IP4Mask(mask) no funciona")
print(f" Intentando: IP4Mask(mask)")
# Probar directamente
try:
result2 = engine.evaluate_line("IP4Mask(mask)")
print(f" Resultado: {result2.result} (tipo: {type(result2.result)})")
if result2.is_error:
print(f" Error: {result2.error}")
except Exception as e:
print(f" Excepción: {e}")
# Ver qué pasa cuando llamamos IP4Mask directamente con el valor
print(f"\n Probando IP4Mask directamente con el valor de mask:")
try:
# Obtener IP4Mask del contexto
IP4Mask = engine.base_context.get('IP4Mask')
if IP4Mask:
print(f" IP4Mask disponible: {IP4Mask}")
direct_result = IP4Mask(mask_value)
print(f" Resultado directo: {direct_result} (tipo: {type(direct_result)})")
else:
print(f" IP4Mask no encontrada en contexto")
except Exception as e:
print(f" Error en llamada directa: {e}")
import traceback
traceback.print_exc()
print(f"\n3. Problema 2: 10.1.1.1 + 1 devuelve Integer")
print(f" Intentando: 10.1.1.1 + 1")
result3 = engine.evaluate_line("10.1.1.1 + 1")
print(f" Resultado: {result3.result} (tipo: {type(result3.result)})")
# Analizar paso a paso
print(f"\n Análisis paso a paso:")
# Crear FourBytes manualmente para probar
try:
FourBytes = engine.base_context.get('FourBytes')
if FourBytes:
print(f" FourBytes disponible: {FourBytes}")
fb = FourBytes("10.1.1.1")
print(f" FourBytes creado: {fb} (tipo: {type(fb)})")
print(f" fb._numeric_value: {fb._numeric_value}")
# Probar suma manual
sum_result = fb + 1
print(f" fb + 1 = {sum_result} (tipo: {type(sum_result)})")
# Ver el método __add__
print(f" Método __add__ de FourBytes: {fb.__add__}")
except Exception as e:
print(f" Error en análisis: {e}")
import traceback
traceback.print_exc()
print(f"\n4. Verificando contexto:")
relevant_classes = ['FourBytes', 'IP4Mask', 'IP4']
for cls_name in relevant_classes:
cls_obj = engine.base_context.get(cls_name)
if cls_obj:
print(f"{cls_name}: {cls_obj}")
else:
print(f"{cls_name}: No encontrada")
except Exception as e:
print(f"Error general: {e}")
import traceback
traceback.print_exc()