Face_reg_app/FaceFeatureExtractorAPI/test_sync_direct.py

89 lines
2.6 KiB
Python
Raw Normal View History

2025-12-17 13:13:26 +08:00
#!/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()