Files
account-manager/scripts/service/lease_commands.py
chendelian 3ce0cc40a1
All checks were successful
技能自动化发布 / release (push) Successful in 6s
Release v2.0.25 force-release lease row action
2026-09-12 16:18:36 +08:00

75 lines
2.4 KiB
Python

# -*- 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 <token>"""
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 <lease_row_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}))