entity/wwwroot/api/entity_import.dspy

36 lines
1.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# entity_import.dspy —— 实体文件导入REST /api/*
# 入参world_id / scene_id / file_name / file文件内容FileStorage 或文本)
# 事务批量:全量校验 → 整批插入;任一条失败回滚无脏数据。
# 返回 {success, total, success_count, fail, file_name}
try:
content = None
fname = (params_kw.get('file_name') or '').strip()
file_obj = params_kw.get('file')
if file_obj is not None:
if hasattr(file_obj, 'read'):
content = file_obj.read()
else:
content = file_obj
if content is None:
content = params_kw.get('content')
if content is None and not fname:
raise EntityError('PARAM_REQUIRED', '缺少导入文件', 'file')
if not fname:
fname = (getattr(file_obj, 'filename', '') or '') if file_obj is not None else ''
parsed = await parse_entity_file(content, fname)
rows = parsed.get('rows', [])
imp_ns = {
'world_id': params_kw.get('world_id'),
'scene_id': params_kw.get('scene_id'),
'file_name': fname or 'entity_import',
'rows': rows,
}
result = await import_entities(imp_ns)
result['success'] = True
return {'code': 'OK', 'message': 'success', 'data': result}
except Exception as e:
if hasattr(e, 'to_dict'):
err = e.to_dict()
return {'code': err['code'], 'message': err['message'], 'field': err['field'], 'detail': err['detail']}
return {'code': 'DB_ERROR', 'message': '导入失败', 'field': '', 'detail': str(e)}