fix: 素材 API 错误信息中文映射(同 Seedance 模式)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m27s

AssetsAPIError 加 user_message,按 code/关键词映射中文提示,用户不再看到英文错误

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
seaislee1209 2026-03-23 18:26:45 +08:00
parent 0a1a3a266c
commit 969283690f
2 changed files with 30 additions and 3 deletions

View File

@ -2726,10 +2726,8 @@ def _assets_api_call(func, *args, **kwargs):
return result, None
except AssetsAPIError as e:
logger.warning('Assets API error: %s', e)
# Surface readable message for known parameter errors
msg = e.api_message if hasattr(e, 'api_message') else str(e)
return None, Response(
{'error': 'assets_api_error', 'message': msg},
{'error': 'assets_api_error', 'message': e.user_message},
status=status.HTTP_502_BAD_GATEWAY,
)
except Exception as e:

View File

@ -21,12 +21,41 @@ HOST = 'open.volcengineapi.com'
PROJECT_NAME = 'int_dev_Airlabs'
_ASSETS_ERROR_MESSAGES = {
'ConfigError': '素材服务未配置,请联系管理员',
'RequestError': '素材服务暂时不可用,请稍后重试',
'InvalidParameter': '素材参数无效,请检查输入',
'NotFound': '素材不存在或已被删除',
'NotExist': '素材不存在或已被删除',
'InternalError': '素材服务异常,请稍后重试',
'Forbidden': '没有权限操作该素材',
'RateLimitExceeded': '操作过于频繁,请稍后重试',
}
_ASSETS_MESSAGE_KEYWORDS = {
'dimension': '图片尺寸不符合要求(宽高需在 300~6000 像素之间)',
'size': '文件大小超出限制',
'format': '不支持的文件格式',
'not found': '素材不存在或已被删除',
'permission': '没有权限操作该素材',
}
class AssetsAPIError(Exception):
"""Raised when the Assets API returns an error."""
def __init__(self, code, message, status_code=400):
self.code = code
self.api_message = message
self.status_code = status_code
# 中文友好提示
friendly = _ASSETS_ERROR_MESSAGES.get(code)
if not friendly:
msg_lower = (message or '').lower()
for keyword, hint in _ASSETS_MESSAGE_KEYWORDS.items():
if keyword in msg_lower:
friendly = hint
break
self.user_message = friendly or '素材操作失败,请稍后重试'
super().__init__(f'[{code}] {message}')