"""
测试 get_baidu_hot_news 工具修复
"""
import json
import builtins

# 模拟修复后的沙箱环境
import urllib.request
import urllib.error

safe_globals = {
    '__builtins__': builtins,
    'json': json,
    'datetime': __import__('datetime'),
    'math': __import__('math'),
    'random': __import__('random'),
    'urllib': __import__('urllib'),
    'urlopen': urllib.request.urlopen,
    'URLError': urllib.error.URLError,
}

# 工具代码
function_code = '''import json
from urllib.request import urlopen
from urllib.error import URLError

def get_baidu_hot_news():
    """获取百度热搜新闻排行榜"""
    url = "https://v2.xxapi.cn/api/baiduhot"
    try:
        with urlopen(url, timeout=10) as response:
            data = json.loads(response.read().decode('utf-8'))
            if data.get("code") == 200:
                return data.get("data", [])
            else:
                return []
    except (URLError, ValueError, KeyError):
        return []
'''

print("测试修复后的沙箱环境")
print("="*60)

try:
    local_vars = {}
    exec(function_code, safe_globals, local_vars)
    
    # 查找函数 - 查找所有 FunctionType，然后选择最后定义的
    import types
    func_name = None
    functions = []
    
    print(f"local_vars 中的所有对象:")
    for name, obj in local_vars.items():
        print(f"  {name}: {type(obj)}")
        if isinstance(obj, types.FunctionType) and not name.startswith('_'):
            functions.append(name)
    
    # 选择最后一个函数（通常是用户定义的）
    if functions:
        # 优先选择不在常见导入列表中的函数
        common_imports = ['urlopen', 'loads', 'dumps', 'randint', 'choice', 'strftime', 'strptime']
        user_functions = [f for f in functions if f not in common_imports]
        
        if user_functions:
            func_name = user_functions[0]
        else:
            func_name = functions[-1]  # 如果都是导入的，选择最后一个
        
        print(f"\n找到的所有函数: {functions}")
        print(f"选择的函数: {func_name}")
    
    if func_name:
        # 执行函数
        result = local_vars[func_name]()
        
        print(f"执行成功!")
        print(f"返回数据类型: {type(result)}")
        
        if isinstance(result, list):
            print(f"返回数据条数: {len(result)}")
            if result:
                print(f"\n前3条热搜:")
                for i, item in enumerate(result[:3], 1):
                    print(f"{i}. {item.get('title', 'N/A')} (热度: {item.get('hot', 'N/A')})")
        else:
            print(f"返回结果: {result}")
    else:
        print("错误: 未找到可执行的函数")
        
except Exception as e:
    print(f"执行失败: {type(e).__name__}: {e}")
    import traceback
    traceback.print_exc()

print("\n" + "="*60)
print("测试完成")
