|
|
@@ -138,29 +138,46 @@ def decrypt_content(resource_id: str, encrypted_text: str, provided_key: Optiona
|
|
|
|
|
|
def serialize_milvus_result(data):
|
|
|
"""将 Milvus 返回的数据转换为可序列化的字典"""
|
|
|
- if data is None:
|
|
|
- return None
|
|
|
- elif isinstance(data, (str, int, float, bool)):
|
|
|
+ # 基本类型直接返回
|
|
|
+ if data is None or isinstance(data, (str, int, float, bool)):
|
|
|
return data
|
|
|
- elif isinstance(data, dict):
|
|
|
+
|
|
|
+ # 字典类型递归处理
|
|
|
+ if isinstance(data, dict):
|
|
|
return {k: serialize_milvus_result(v) for k, v in data.items()}
|
|
|
- elif isinstance(data, (list, tuple)):
|
|
|
+
|
|
|
+ # 列表/元组类型递归处理
|
|
|
+ if isinstance(data, (list, tuple)):
|
|
|
return [serialize_milvus_result(item) for item in data]
|
|
|
- elif hasattr(data, '__iter__') and not isinstance(data, (str, bytes)):
|
|
|
- # 处理 RepeatedScalarContainer 等可迭代对象
|
|
|
- # 先转换为列表,确保返回的是真正的列表而不是字符串表示
|
|
|
+
|
|
|
+ # 尝试转换为字典(对于有 to_dict 方法的对象)
|
|
|
+ if hasattr(data, 'to_dict') and callable(getattr(data, 'to_dict')):
|
|
|
try:
|
|
|
- return [serialize_milvus_result(item) for item in list(data)]
|
|
|
+ return serialize_milvus_result(data.to_dict())
|
|
|
except:
|
|
|
- # 如果迭代失败,尝试转换为字符串
|
|
|
- return str(data)
|
|
|
- elif hasattr(data, 'to_dict'):
|
|
|
- return serialize_milvus_result(data.to_dict())
|
|
|
- elif hasattr(data, '__dict__'):
|
|
|
- return serialize_milvus_result(vars(data))
|
|
|
- else:
|
|
|
- # 最后的fallback
|
|
|
- return data
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 尝试转换为列表(对于可迭代对象,如 RepeatedScalarContainer)
|
|
|
+ if hasattr(data, '__iter__') and not isinstance(data, (str, bytes, dict)):
|
|
|
+ try:
|
|
|
+ # 强制转换为列表并递归处理
|
|
|
+ result = []
|
|
|
+ for item in data:
|
|
|
+ result.append(serialize_milvus_result(item))
|
|
|
+ return result
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 尝试获取对象的属性字典
|
|
|
+ if hasattr(data, '__dict__'):
|
|
|
+ try:
|
|
|
+ return serialize_milvus_result(vars(data))
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 最后的 fallback:对于无法处理的类型,返回 None 而不是字符串表示
|
|
|
+ # 这样可以避免产生无法序列化的字符串
|
|
|
+ return None
|
|
|
|
|
|
|
|
|
def init_db():
|