#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试修复后的统计方法 """ import sys import os # 添加项目路径 current_dir = os.path.dirname(__file__) suw_core_dir = os.path.dirname(current_dir) blenderpython_dir = os.path.dirname(suw_core_dir) sys.path.insert(0, blenderpython_dir) def test_all_stats(): """测试所有统计方法""" print("📊 测试修复后的统计方法...") try: from suw_core import get_all_stats stats = get_all_stats() print(f"\n📋 get_all_stats 返回 {len(stats)} 个统计项:") success_count = 0 for name, stat in stats.items(): if name == 'module_version': print(f"✅ {name}: {stat}") success_count += 1 elif stat and isinstance(stat, dict) and 'manager_type' in stat: manager_type = stat['manager_type'] error = stat.get('error') if error: print(f"⚠️ {name}: {manager_type} (有错误: {error})") else: print(f"✅ {name}: {manager_type}") success_count += 1 elif stat and isinstance(stat, dict): print(f"⚠️ {name}: 有数据但缺少 manager_type") elif stat: print(f"⚠️ {name}: 格式不标准 ({type(stat)})") else: print(f"❌ {name}: 无数据") print( f"\n📈 统计方法成功率: {success_count}/{len(stats)} ({success_count/len(stats)*100:.1f}%)") return success_count >= len(stats) * 0.8 # 80% 成功算合格 except Exception as e: print(f"❌ 统计测试失败: {e}") import traceback traceback.print_exc() return False def test_individual_managers(): """测试单个管理器的统计方法""" print("\n🔍 测试单个管理器...") try: # 初始化所有管理器 from suw_core import init_all_managers class MockSUWImpl: def __init__(self): self.parts = {} self.zones = {} mock_suw_impl = MockSUWImpl() managers = init_all_managers(mock_suw_impl) # 测试每个管理器的统计方法 manager_tests = [ ('material_manager', 'get_material_stats'), ('part_creator', 'get_part_creator_stats'), ('machining_manager', 'get_machining_stats'), ('selection_manager', 'get_selection_stats'), ('deletion_manager', 'get_deletion_stats'), ('hardware_manager', 'get_hardware_stats'), ('door_drawer_manager', 'get_door_drawer_stats'), ('dimension_manager', 'get_dimension_stats'), ('command_dispatcher', 'get_dispatcher_stats'), ] success_count = 0 for manager_name, stats_method in manager_tests: manager = managers.get(manager_name) if manager and hasattr(manager, stats_method): try: stats = getattr(manager, stats_method)() if isinstance(stats, dict) and 'manager_type' in stats: print(f"✅ {manager_name}: {stats['manager_type']}") success_count += 1 else: print(f"⚠️ {manager_name}: 方法存在但格式不对") except Exception as e: print(f"❌ {manager_name}: 方法调用失败 - {e}") else: print(f"❌ {manager_name}: 管理器不存在或缺少统计方法") print(f"\n📈 单个管理器测试: {success_count}/{len(manager_tests)} 成功") return success_count >= len(manager_tests) * 0.8 except Exception as e: print(f"❌ 单个管理器测试失败: {e}") return False def main(): """主测试函数""" print("🚀 测试修复后的统计方法...") print("="*60) # 1. 测试全局统计 all_stats_ok = test_all_stats() # 2. 测试单个管理器 individual_ok = test_individual_managers() print("\n" + "="*60) print("📋 修复验证总结:") print(f" 全局统计: {'✅ 正常' if all_stats_ok else '❌ 有问题'}") print(f" 单个管理器: {'✅ 正常' if individual_ok else '❌ 有问题'}") if all_stats_ok and individual_ok: print("\n🎉 统计方法修复验证成功!") print("💡 现在可以在客户端中运行 show_module_status() 查看完整状态") return True else: print("\n⚠️ 还有统计方法需要修复") return False if __name__ == "__main__": main()