# -*- coding: utf-8 -*- """Lease management CLI commands.""" from db.accounts_repo import ( cleanup_expired_leases, list_active_leases, release_lease, release_lease_by_id, ) from service._svc_common import _err_json, _ok_json, _say from util.logging_config import get_skill_logger def cmd_lease_release(lease_token: str) -> None: """lease release """ log = get_skill_logger() log.info("cli_start subcommand=lease_release token_prefix=%s", lease_token[:8]) ok = release_lease(lease_token) if ok: _say(_ok_json({"lease_token": lease_token, "status": "released"})) else: _say(_err_json("ERROR:LEASE_NOT_FOUND", "未找到活跃的租约,或租约已释放/过期。")) def cmd_lease_force_release(lease_id: int) -> None: """lease force-release --id — data-management row action.""" log = get_skill_logger() log.info("cli_start subcommand=lease_force_release lease_id=%s", lease_id) try: lid = int(lease_id) except (TypeError, ValueError): _say(_err_json("ERROR:CLI_BAD_ARGS", "租约编号必须是数字。")) return if lid <= 0: _say(_err_json("ERROR:CLI_BAD_ARGS", "租约编号必须是正整数。")) return released = release_lease_by_id(lid) if not released: _say( _err_json( "ERROR:LEASE_NOT_FOUND", "未找到可释放的活跃租约(可能已释放、已过期清理,或不存在)。", ) ) return _say( _ok_json( { "id": released["id"], "account_id": released["account_id"], "holder": released.get("holder") or "", "purpose": released.get("purpose") or "", "status": "released", "message": "已强制释放租约,该账号可被其它任务占用。", } ) ) def cmd_lease_list(active_only: bool = False) -> None: """lease list [--active]""" log = get_skill_logger() log.info("cli_start subcommand=lease_list active_only=%s", active_only) leases = list_active_leases() if active_only: pass _say(_ok_json({"leases": leases})) def cmd_lease_cleanup() -> None: """lease cleanup — mark expired leases as expired.""" log = get_skill_logger() log.info("cli_start subcommand=lease_cleanup") count = cleanup_expired_leases() _say(_ok_json({"cleaned": count}))