"""包管理命令:package (create / info / list)。""" from __future__ import annotations import argparse import logging from sapcli.client import ADTClient logger = logging.getLogger("sapcli.commands.package_cmd") def cmd_package(args: argparse.Namespace, client: ADTClient) -> None: """ABAP 包操作。""" action = getattr(args, "package_action", None) if action == "create": _package_create(args, client) elif action == "info": _package_info(args, client) elif action == "list": _package_list(args, client) else: print(" 用法: sap-cli package [create|info|list]") print(" create — 创建 ABAP 包") print(" info — 查看包详情") print(" list — 列出对象(通过 list 命令按包过滤)") def _package_create(args: argparse.Namespace, client: ADTClient) -> None: """创建 ABAP 包。""" name: str = args.name description: str = getattr(args, "description", None) or name superpackage: str | None = getattr(args, "superpackage", None) print("=" * 60) print(" SAP 创建 ABAP 包") print("=" * 60) print(f" 包名: {name}") print(f" 描述: {description}") if superpackage: print(f" 上级包: {superpackage}") print(f"\n → 正在创建包...") try: success = client.create_package(name, description, superpackage) except Exception as e: print(f" ✗ 创建失败: {e}") return if success: print(f" ✓ 包 {name} 创建成功!") else: print(f" ✗ 包创建失败") def _package_info(args: argparse.Namespace, client: ADTClient) -> None: """查看包详情。""" name: str = args.name print("=" * 60) print(" SAP 包信息") print("=" * 60) print(f" 包名: {name}") print(f"\n → 正在查询...") try: info = client.get_package_info(name) except Exception as e: print(f" ✗ 查询失败: {e}") return print(f"\n {'─' * 50}") print(f" 名称: {info.get('name', '')}") print(f" 描述: {info.get('description', '')}") print(f" 所有者: {info.get('owner', '')}") print(f" 上级包: {info.get('superpackage', '(无)')}") print(f" {'─' * 50}") def _package_list(args: argparse.Namespace, client: ADTClient) -> None: """列出包中的对象。""" name: str = args.name print("=" * 60) print(" SAP 包对象列表") print("=" * 60) print(f" 包名: {name}") print(f"\n → 正在查询...") try: results = client.list_objects(package=name) except Exception as e: print(f" ✗ 查询失败: {e}") return if not results: print(" ℹ 包中没有找到对象") return print(f" ✓ 找到 {len(results)} 个对象\n") print(f" {'名称':<30s} {'类型':<12s} {'描述':<30s}") print(f" {'─' * 30} {'─' * 12} {'─' * 30}") for obj in results: obj_name = obj.get("name", "")[:30] obj_type = obj.get("type", "")[:12] desc = obj.get("description", "")[:30] print(f" {obj_name:<30s} {obj_type:<12s} {desc:<30s}")