fix(communication): _rec_to_dict 用 dict(rec) 取列,修复 DictObject 列名取不到问题

sqlor 返回 DictObject,列名不暴露为实例属性(dir() 只列 dict 方法),
dir(rec)+getattr 会取到 None。改 dict(rec),questions.get_question 同步修复。
This commit is contained in:
ymq 2026-08-16 22:14:44 +08:00
parent 6707cabedc
commit b4e5e20ccf
2 changed files with 19 additions and 7 deletions

View File

@ -177,10 +177,22 @@ async def list_problems_for(role, agentid=None, tenant_id=None, task_id=None, li
def _rec_to_dict(rec):
if hasattr(rec, '__dict__'):
return {k: getattr(rec, k) for k in dir(rec)
if not k.startswith('_') and not callable(getattr(rec, k))}
return dict(rec)
"""把 sqlor 记录对象转成 dict。
sqlor 返回 appPublic.dictObject.DictObject列名不暴露为实例属性dir() 只列 dict 方法
必须用 dict(rec) 取列不能用 dir(rec) + getattr会取到 None/方法
"""
if isinstance(rec, dict):
return dict(rec)
try:
return dict(rec)
except (TypeError, ValueError):
if hasattr(rec, 'to_dict'):
try:
return rec.to_dict()
except Exception:
pass
return {}
async def get_task_qa(task_id, role=None, agentid=None) -> dict:

View File

@ -71,10 +71,10 @@ async def get_question(question_id: str):
if not recs:
return None
rec = recs[0]
if hasattr(rec, '__dict__'):
d = {k: getattr(rec, k) for k in dir(rec) if not k.startswith('_')}
else:
try:
d = dict(rec)
except Exception:
d = {}
ctx = d.get('context')
if ctx and isinstance(ctx, str):
try: