From bad7355c96c3da0c2d6b9df6f17ae0ad6239f0ac Mon Sep 17 00:00:00 2001 From: Alexandr Karpov Date: Thu, 6 Apr 2023 14:41:10 +0300 Subject: [PATCH] added list, file process --- .../commands/delete_expired_uploads.py | 2 +- akarpov/files/signals.py | 4 ++-- akarpov/files/tasks.py | 10 ++++++++-- akarpov/files/urls.py | 2 ++ akarpov/files/views.py | 20 +++++++++++++++++-- akarpov/templates/base.html | 6 ++++++ akarpov/templates/files/list.html | 10 ++++++++++ config/urls.py | 2 +- 8 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 akarpov/templates/files/list.html diff --git a/akarpov/contrib/chunked_upload/management/commands/delete_expired_uploads.py b/akarpov/contrib/chunked_upload/management/commands/delete_expired_uploads.py index e0ad1cd..9133772 100644 --- a/akarpov/contrib/chunked_upload/management/commands/delete_expired_uploads.py +++ b/akarpov/contrib/chunked_upload/management/commands/delete_expired_uploads.py @@ -2,7 +2,7 @@ from django.core.management.base import BaseCommand from django.utils import timezone -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from akarpov.contrib.chunked_upload.constants import COMPLETE, UPLOADING from akarpov.contrib.chunked_upload.models import ChunkedUpload diff --git a/akarpov/files/signals.py b/akarpov/files/signals.py index f4b5b7b..bd17aca 100644 --- a/akarpov/files/signals.py +++ b/akarpov/files/signals.py @@ -2,13 +2,13 @@ from django.dispatch import receiver from akarpov.files.models import File -from akarpov.files.tasks import generate_file_review +from akarpov.files.tasks import process_file @receiver(post_save, sender=File) def post_on_create(sender, instance: File, created, **kwargs): if created: - generate_file_review.apply_async( + process_file.apply_async( kwargs={ "pk": instance.pk, }, diff --git a/akarpov/files/tasks.py b/akarpov/files/tasks.py index 9ff8996..39633a2 100644 --- a/akarpov/files/tasks.py +++ b/akarpov/files/tasks.py @@ -1,3 +1,5 @@ +import os + from celery import shared_task from django.core.files import File @@ -6,14 +8,18 @@ @shared_task() -def generate_file_review(pk: int): +def process_file(pk: int): file = FileModel.objects.get(pk=pk) + if not file.name: + file.name = file.file.name pth = create_preview(file.file) with open(pth, "rb") as f: file.preview.save( pth.split("/")[-1], - File(f.read()), + File(f), save=False, ) file.save(update_fields=["preview"]) + if os.path.isfile(pth): + os.remove(pth) return pk diff --git a/akarpov/files/urls.py b/akarpov/files/urls.py index 98e46c0..e150468 100644 --- a/akarpov/files/urls.py +++ b/akarpov/files/urls.py @@ -4,12 +4,14 @@ ChunkedUploadDemo, MyChunkedUploadCompleteView, MyChunkedUploadView, + TopFolderView, files_view, folder_view, ) app_name = "files" urlpatterns = [ + path("", TopFolderView.as_view(), name="main"), path("upload", ChunkedUploadDemo.as_view(), name="chunked_upload"), path( "api/chunked_upload_complete/", diff --git a/akarpov/files/views.py b/akarpov/files/views.py index 64a46ab..6b1bb9e 100644 --- a/akarpov/files/views.py +++ b/akarpov/files/views.py @@ -1,6 +1,7 @@ import os -from django.views.generic import DetailView +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import DetailView, ListView from django.views.generic.base import TemplateView from akarpov.contrib.chunked_upload.exceptions import ChunkedUploadError @@ -12,6 +13,21 @@ from akarpov.files.models import File, Folder +class TopFolderView(LoginRequiredMixin, ListView): + template_name = "files/list.html" + model = File + + def get_queryset(self): + return File.objects.filter(user=self.request.user, folder__isnull=True) + + def get_context_data(self, **kwargs): + contex = super().get_context_data(**kwargs) + contex["folders"] = Folder.objects.filter( + user=self.request.user, parent__isnull=True + ) + return contex + + class FileView(DetailView): template_name = "files/view.html" model = File @@ -69,4 +85,4 @@ def on_completion(self, uploaded_file, request): os.remove(uploaded_file.file.path) def get_response_data(self, chunked_upload, request): - return {"message": (self.message)} + return {"message": self.message} diff --git a/akarpov/templates/base.html b/akarpov/templates/base.html index 906ea4c..46c0703 100644 --- a/akarpov/templates/base.html +++ b/akarpov/templates/base.html @@ -49,6 +49,12 @@ About me + {% if request.user.is_authenticated %} +
  • + + Files +
  • + {% endif %}