文件预览

_output.py

查看 1688 Shop Operate 技能包中的文件内容。

文件内容

scripts/_output.py

#!/usr/bin/env python3
"""
统一输出工具
"""

import json

from _errors import SkillError, AuthError, GatewayAuthError


def make_output(success: bool, markdown: str = "", data: dict = None,
                error_code: str = "", required_scope: str = "",
                current_scope: str = "") -> dict:
    """构建标准输出字典(仅包含非空字段)"""
    result = {"success": success}
    if markdown:
        result["markdown"] = markdown
    if data is not None:
        result["data"] = data
    if error_code:
        result["error_code"] = error_code
    if required_scope:
        result["required_scope"] = required_scope
    if current_scope:
        result["current_scope"] = current_scope
    return result


def print_output(output: dict):
    """打印标准 JSON 输出"""
    print(json.dumps(output, ensure_ascii=False, indent=2))


def print_error(e: Exception, default_data: dict = None):
    """将异常转为标准错误输出并打印"""
    if isinstance(e, GatewayAuthError):
        output = make_output(
            success=False,
            error_code=e.error_code,
            markdown=e.message,
            required_scope=e.required_scope,
        )
    elif isinstance(e, AuthError):
        output = make_output(
            success=False,
            markdown=f"❌ {e.message}\n\n请先执行 `cli.py get_ak` 自动获取 AK;如果自动获取失败,引导用户前往 https://clawhub.1688.com/ 登录后右上角点击🔑复制获取ak内容后执行 `python3 cli.py configure YOUR_AK`",
            data=default_data,
        )
    elif isinstance(e, SkillError):
        output = make_output(success=False, markdown=f"❌ {e.message}", data=default_data)
    elif isinstance(e, ValueError):
        output = make_output(success=False, markdown=f"❌ 参数错误:{e}", data=default_data)
    else:
        output = make_output(success=False, markdown=f"❌ 操作失败:{e}", data=default_data)
    print_output(output)