verification_report.py 5.29 KB
#!/usr/bin/env python3
"""
验证报告 - 确认请求上下文和日志系统修复完成
"""

import sys
import os
import traceback

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

def run_verification():
    """运行完整的验证测试"""
    print("🔍 开始系统验证...")
    print("=" * 60)

    tests_passed = 0
    tests_total = 0

    def run_test(test_name, test_func):
        nonlocal tests_passed, tests_total
        tests_total += 1
        try:
            test_func()
            print(f"✅ {test_name}")
            tests_passed += 1
        except Exception as e:
            print(f"❌ {test_name} - 失败: {e}")
            traceback.print_exc()

    # 测试1: 基础模块导入
    def test_imports():
        from utils.logger import get_logger, setup_logging
        from context.request_context import create_request_context, RequestContextStage
        from query.query_parser import QueryParser
        assert get_logger is not None
        assert create_request_context is not None

    # 测试2: 日志系统
    def test_logging():
        from utils.logger import get_logger, setup_logging
        setup_logging(log_level="INFO", log_dir="verification_logs")
        logger = get_logger("verification")
        logger.info("测试消息", extra={'reqid': 'test', 'uid': 'user'})

    # 测试3: 请求上下文创建
    def test_context_creation():
        from context.request_context import create_request_context
        context = create_request_context("req123", "user123")
        assert context.reqid == "req123"
        assert context.uid == "user123"

    # 测试4: 查询解析(这是之前出错的地方)
    def test_query_parsing():
        from context.request_context import create_request_context
        from query.query_parser import QueryParser

        class TestConfig:
            class QueryConfig:
                enable_query_rewrite = False
                rewrite_dictionary = {}
                enable_translation = False
                supported_languages = ['en', 'zh']
                enable_text_embedding = False
            query_config = QueryConfig()
            indexes = []

        config = TestConfig()
        parser = QueryParser(config)
        context = create_request_context("req456", "user456")

        # 这之前会抛出 "Logger._log() got an unexpected keyword argument 'reqid'" 错误
        result = parser.parse("test query", context=context, generate_vector=False)
        assert result.original_query == "test query"

    # 测试5: 完整的中文查询处理
    def test_chinese_query():
        from context.request_context import create_request_context
        from query.query_parser import QueryParser

        class TestConfig:
            class QueryConfig:
                enable_query_rewrite = True
                rewrite_dictionary = {'芭比娃娃': 'brand:芭比'}
                enable_translation = False
                supported_languages = ['en', 'zh']
                enable_text_embedding = False
            query_config = QueryConfig()
            indexes = []

        config = TestConfig()
        parser = QueryParser(config)
        context = create_request_context("req789", "user789")

        result = parser.parse("芭比娃娃", context=context, generate_vector=False)
        # 语言检测可能不准确,但查询应该正常处理
        assert result.original_query == "芭比娃娃"
        assert "brand:芭比" in result.rewritten_query

    # 测试6: 性能摘要
    def test_performance_summary():
        from context.request_context import create_request_context, RequestContextStage

        context = create_request_context("req_perf", "user_perf")
        context.start_stage(RequestContextStage.TOTAL)
        context.start_stage(RequestContextStage.QUERY_PARSING)
        context.end_stage(RequestContextStage.QUERY_PARSING)
        context.end_stage(RequestContextStage.TOTAL)

        summary = context.get_summary()
        assert 'performance' in summary
        assert 'stage_timings_ms' in summary['performance']

    # 运行所有测试
    run_test("基础模块导入", test_imports)
    run_test("日志系统", test_logging)
    run_test("请求上下文创建", test_context_creation)
    run_test("查询解析(修复验证)", test_query_parsing)
    run_test("中文查询处理", test_chinese_query)
    run_test("性能摘要", test_performance_summary)

    # 输出结果
    print("\n" + "=" * 60)
    print(f"📊 验证结果: {tests_passed}/{tests_total} 测试通过")

    if tests_passed == tests_total:
        print("🎉 所有验证通过!系统修复完成。")
        print("\n🔧 修复内容:")
        print("  - 修复了 utils/logger.py 中的日志参数处理")
        print("  - 修复了 context/request_context.py 中的日志调用格式")
        print("  - 修复了 query/query_parser.py 中的日志调用格式")
        print("  - 修复了 search/searcher.py 中的日志调用格式")
        print("  - 修复了 api/routes/search.py 中的日志调用格式")
        print("\n✅ 现在可以正常处理搜索请求,不会再出现 Logger._log() 错误。")
        return True
    else:
        print("💥 还有测试失败,需要进一步修复。")
        return False

if __name__ == "__main__":
    success = run_verification()
    sys.exit(0 if success else 1)