from django.core.management.base import BaseCommand from vbv_lernwelt.files.models import UploadFile class Command(BaseCommand): help = "Delete unreferenced uploads and delete their files" def add_arguments(self, parser): parser.add_argument( "--dry-run", action="store_true", dest="dry_run", default=False, help="Dry run", ) def handle(self, *args, **options): dry_run = options["dry_run"] num_deleted = 0 unreferenced_uploads = UploadFile.objects.filter( upload_finished_at__isnull=True ) if dry_run: print("------ DRY RUN -------") print( "Going to delete {} unreferenced uploads".format( unreferenced_uploads.count() ) ) for upload in unreferenced_uploads: try: if not dry_run: upload.delete_file() file_id = upload.id upload.delete() print("Deleted file with id {}".format(file_id)) else: print("Would delete file with id {}".format(upload.id)) num_deleted += 1 except Exception as e: print(e) pass print("Deleted {:d} uploads".format(num_deleted))