Files
J621/backend/apps/library/management/commands/cleanup_temp_uploads.py
T
2026-09-21 09:01:01 -05:00

39 lines
1.2 KiB
Python

from datetime import timedelta
from django.core.management.base import BaseCommand
from django.utils import timezone
from apps.library.models import TempUpload
class Command(BaseCommand):
help = "Delete staged uploads older than N hours (default 24)."
def add_arguments(self, parser):
parser.add_argument("--hours", type=int, default=24)
parser.add_argument(
"--include-completed",
action="store_true",
help="Also remove completed staging records.",
)
def handle(self, *args, **options):
from apps.library.upload_pipeline import reap_stale_claims
reap_stale_claims()
cutoff = timezone.now() - timedelta(hours=options["hours"])
queryset = TempUpload.objects.filter(created_at__lt=cutoff)
if not options["include_completed"]:
queryset = queryset.exclude(status=TempUpload.STATUS_COMPLETED)
removed = 0
for temp in queryset:
if temp.file:
temp.file.delete(save=False)
temp.delete()
removed += 1
self.stdout.write(
self.style.SUCCESS(f"Removed {removed} staged upload(s).")
)