将 service 返回的旧格式错误转换为统一错误对象,同时保留兼容字段。
(result: dict, context: dict = None, fallback_status: int = 500)
| 76 | |
| 77 | |
| 78 | def normalize_error_result(result: dict, context: dict = None, fallback_status: int = 500) -> dict: |
| 79 | """将 service 返回的旧格式错误转换为统一错误对象,同时保留兼容字段。""" |
| 80 | if result.get("success", False): |
| 81 | return result |
| 82 | |
| 83 | error = result.get("error") or result.get("error_message") or "操作失败" |
| 84 | if isinstance(error, dict) and error.get("code"): |
| 85 | error_obj = error |
| 86 | error_message = result.get("error_message") or f"{error_obj.get('title', '操作失败')}:{error_obj.get('suggestion') or error_obj.get('detail', '')}" |
| 87 | else: |
| 88 | app_error = ensure_app_error(error, context=context) |
| 89 | if app_error.status == 500 and fallback_status != 500: |
| 90 | app_error.status = fallback_status |
| 91 | error_obj = app_error.to_dict() |
| 92 | error_message = app_error.to_message() |
| 93 | |
| 94 | next_result = dict(result) |
| 95 | next_result["error"] = error_obj |
| 96 | next_result["error_message"] = error_message |
| 97 | return next_result |
| 98 | |
| 99 | |
| 100 | def mask_api_key(key: str) -> str: |