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): 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).") )