#!/usr/bin/env python # -*- coding: utf-8 -*- """ 直接测试同步API的Pydantic序列化 不通过HTTP,直接模拟返回值构建过程 """ from database import User, get_db, init_database from app import SyncUsersResponse from pydantic import ValidationError import json def test_sync_response(): """测试同步响应的序列化""" print("="*60) print("测试同步API响应序列化") print("="*60) # 初始化数据库 init_database() # 获取数据库会话 db = next(get_db()) try: # 查询所有激活用户 users = db.query(User).filter(User.is_active == True).all() print(f"\n查询到 {len(users)} 个激活用户") # 转换为字典列表 user_list = [] for i, user in enumerate(users): print(f"\n处理用户 {i+1}: {user.name}") user_dict = user.to_dict_with_feature() # 打印字典的键 print(f" 字典键: {list(user_dict.keys())}") # 检查特征向量 if 'feature_vector' in user_dict: feature = user_dict['feature_vector'] print(f" 特征向量类型: {type(feature)}") print(f" 特征向量长度: {len(feature) if isinstance(feature, list) else 'N/A'}") if isinstance(feature, list) and len(feature) > 0: print(f" 第一个元素类型: {type(feature[0])}") user_list.append(user_dict) # 尝试构建Pydantic响应 print("\n" + "="*60) print("尝试构建SyncUsersResponse对象...") print("="*60) try: response = SyncUsersResponse( success=True, message="同步成功", total=len(user_list), users=user_list ) print("✅ Pydantic模型验证成功!") # 尝试序列化为JSON print("\n尝试序列化为JSON...") json_str = response.model_dump_json(indent=2) print("✅ JSON序列化成功!") print(f"\nJSON长度: {len(json_str)} 字符") # 显示前500个字符 if len(json_str) > 500: print(f"\n前500个字符:\n{json_str[:500]}...") else: print(f"\n完整JSON:\n{json_str}") except ValidationError as e: print("❌ Pydantic验证失败!") print(f"错误详情:\n{e}") except Exception as e: print(f"❌ JSON序列化失败: {e}") import traceback traceback.print_exc() finally: db.close() if __name__ == "__main__": test_sync_response()