"""传输管理命令:transport (list / info / release / objects)。""" from __future__ import annotations import argparse import logging from sapcli.client import ADTClient logger = logging.getLogger("sapcli.commands.transport") def cmd_transport(args: argparse.Namespace, client: ADTClient) -> None: """传输请求管理。""" action = getattr(args, "transport_action", None) if action == "list": _transport_list(args, client) elif action == "info": _transport_info(args, client) elif action == "release": _transport_release(args, client) elif action == "objects": _transport_objects(args, client) else: print(" 用法: sap-cli transport [list|info|release|objects]") print(" list — 列出可修改的传输请求") print(" info — 查看传输请求详情") print(" release — 释放传输请求") print(" objects — 列出传输请求中的对象") def _transport_list(args: argparse.Namespace, client: ADTClient) -> None: """列出可修改的传输请求。""" print("=" * 60) print(" SAP 传输请求列表") print("=" * 60) print(f"\n → 正在查询传输请求...") try: requests_list = client.list_transport_requests() except Exception as e: print(f" ✗ 查询失败: {e}") return if not requests_list: print(" ℹ 未找到可修改的传输请求") return print(f" ✓ 找到 {len(requests_list)} 个传输请求\n") print(f" {'编号':<15s} {'描述':<40s} {'所有者':<15s}") print(f" {'─' * 15} {'─' * 40} {'─' * 15}") for req in requests_list: num = req.get("number", "")[:15] desc = req.get("description", "")[:40] owner = req.get("owner", "")[:15] print(f" {num:<15s} {desc:<40s} {owner:<15s}") def _transport_info(args: argparse.Namespace, client: ADTClient) -> None: """查看传输请求详情。""" corr_nr: str = args.corr_nr print("=" * 60) print(" SAP 传输请求详情") print("=" * 60) print(f" 传输请求: {corr_nr}") print(f"\n → 正在查询...") try: info = client.transport_info(corr_nr) except Exception as e: print(f" ✗ 查询失败: {e}") return print(f"\n {'─' * 50}") print(f" 描述: {info.get('description', '')}") print(f" 状态: {info.get('status', '')}") print(f" 所有者: {info.get('owner', '')}") print(f" {'─' * 50}") def _transport_release(args: argparse.Namespace, client: ADTClient) -> None: """释放传输请求。""" corr_nr: str = args.corr_nr print("=" * 60) print(" SAP 释放传输请求") print("=" * 60) print(f" 传输请求: {corr_nr}") print(f"\n ⚠️ 即将释放传输请求: {corr_nr}") confirm = input(" 确认释放? (输入 yes 确认): ").strip() if confirm.lower() != "yes": print(" 已取消释放操作") return print(f"\n → 正在释放...") try: success = client.transport_release(corr_nr) except Exception as e: print(f" ✗ 释放失败: {e}") return if success: print(f" ✓ 传输请求 {corr_nr} 已成功释放!") else: print(f" ✗ 释放失败,请检查传输请求状态") def _transport_objects(args: argparse.Namespace, client: ADTClient) -> None: """列出传输请求中的对象。""" corr_nr: str = args.corr_nr print("=" * 60) print(" SAP 传输请求对象列表") print("=" * 60) print(f" 传输请求: {corr_nr}") print(f"\n → 正在查询...") try: objects = client.transport_objects(corr_nr) except Exception as e: print(f" ✗ 查询失败: {e}") return if not objects: print(" ℹ 传输请求中无对象") return print(f" ✓ 找到 {len(objects)} 个对象\n") print(f" {'名称':<30s} {'类型':<15s}") print(f" {'─' * 30} {'─' * 15}") for obj in objects: obj_name = obj.get("name", "")[:30] obj_type = obj.get("type", "")[:15] print(f" {obj_name:<30s} {obj_type:<15s}")