# retoor from devplacepy.cli._shared import _audit_cli def cmd_quiz_prune(args): from datetime import datetime, timedelta, timezone from devplacepy.config import QUIZ_ATTEMPT_RETENTION_DAYS from devplacepy.services.quiz import store cutoff = ( datetime.now(timezone.utc) - timedelta(days=QUIZ_ATTEMPT_RETENTION_DAYS) ).isoformat() removed = store.prune_attempts(cutoff) _audit_cli( "cli.quiz.prune", f"CLI pruned {removed} abandoned quiz attempt(s)", metadata={"count": removed, "retention_days": QUIZ_ATTEMPT_RETENTION_DAYS}, ) print(f"Pruned {removed} abandoned or expired quiz attempt(s)") def register_quiz(subparsers): quiz = subparsers.add_parser("quiz", help="Quiz management") quiz_sub = quiz.add_subparsers(title="action", dest="action") prune = quiz_sub.add_parser( "prune", help="Delete abandoned and expired attempts older than the retention window", ) prune.set_defaults(func=cmd_quiz_prune)