Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce multiple file upload app enhancements #1

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
12 changes: 10 additions & 2 deletions api/django-fileupload/django_fileupload/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@


class FileUploadAdmin(admin.ModelAdmin):
list_display = ("name", "uploaded_by", "uploaded_on", "detected_mime_type", "hr_size", "checksum")
readonly_fields = ("file_upload_batch", "position", "file", "detected_mime_type", "checksum")
list_display = ("name", "uploaded_by", "uploaded_on", "deleted_on", "detected_mime_type", "hr_size", "checksum")
readonly_fields = ("deleted_on", "file_upload_batch", "position", "file", "detected_mime_type", "checksum")

def hr_size(self, file_upload: FileUpload):
return hr_size(file_upload.size)
Expand All @@ -22,6 +22,14 @@ def uploaded_on(self, file_upload: FileUpload):

uploaded_on.short_description = "Uploaded on"

def deleted_on(self, file_upload: FileUpload):
if file_upload.deleted_on:
return dt.strftime(file_upload.deleted_on, DATE_TIME_FORMAT)
else:
return "Not deleted"

deleted_on.short_description = "Deleted on"

def uploaded_by(self, file_upload: FileUpload):
return file_upload.file_upload_batch.owner

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 5.0 on 2024-07-04 19:21

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("django_fileupload", "0007_alter_fileuploadbatch_owner"),
]

operations = [
migrations.AddField(
model_name="fileupload",
name="deleted_on",
field=models.DateTimeField(editable=False, null=True),
),
]
1 change: 1 addition & 0 deletions api/django-fileupload/django_fileupload/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class FileUpload(models.Model):
file = models.FileField(upload_to=_generate_complete_file_path, storage=FileUploadFileStorage())
detected_mime_type = models.CharField(max_length=100, editable=False)
checksum = models.CharField(max_length=64, editable=False)
deleted_on = models.DateTimeField(null=True, editable=False)

def __str__(self):
return self.file.path
Expand Down
12 changes: 12 additions & 0 deletions api/django-fileupload/django_fileupload/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.serializers import ValidationError
from django.utils import timezone

from django_common.postgresql import exclusive_insert_table_lock
from django_common.renderers import PassthroughRenderer
Expand Down Expand Up @@ -100,4 +101,15 @@ class FileUploadViewSet(
mixins.DestroyModelMixin,
viewsets.GenericViewSet,
):
keep_after_deletion = False

def destroy(self, request, *args, **kwargs):
file_upload = self.get_object()
if self.keep_after_deletion:
file_upload.deleted_on = timezone.now()
file_upload.save()
else:
file_upload.delete()

return Response(status=status.HTTP_204_NO_CONTENT)
pass