# retoor <retoor@molodetz.nl>
from devplacepy.cli._shared import _audit_cli
def cmd_accounts_prune(args):
from devplacepy.services.moderation import deletion
pending = deletion.due_purges()
if args.dry_run:
for row in pending:
print(f"{row['uid']} deleted at {row['deletion_requested_at']}")
print(f"{len(pending)} account(s) due for purge")
return
purged = deletion.purge_due()
_audit_cli(
"cli.accounts.prune",
f"CLI purged {purged} deleted account(s) past the grace window",
metadata={"count": purged},
)
print(f"Purged {purged} deleted account(s)")
def cmd_accounts_pending(args):
from devplacepy.services.moderation import deletion
pending = deletion.due_purges()
for row in pending:
print(f"{row['uid']}\t{row['deletion_requested_at']}")
print(f"{len(pending)} account(s) past the {deletion.grace_hours()}h grace window")
def register_accounts(subparsers):
accounts = subparsers.add_parser("accounts", help="Deleted account management")
accounts_sub = accounts.add_subparsers(title="action", dest="action")
prune = accounts_sub.add_parser(
"prune", help="Permanently purge accounts past the deletion grace window"
)
prune.add_argument(
"--dry-run", action="store_true", help="List what would be purged and exit"
)
prune.set_defaults(func=cmd_accounts_prune)
pending = accounts_sub.add_parser(
"pending", help="List deleted accounts awaiting their purge"
)
pending.set_defaults(func=cmd_accounts_pending)