Improve downloading series zip files

This commit is contained in:
Ross
2023-12-23 16:20:08 +00:00
parent 5790f6430d
commit 8c0aaa82e2
3 changed files with 43 additions and 18 deletions
+35
View File
@@ -51,6 +51,10 @@ from generic.filters import CidUserFilter, ExaminationFilter
from generic.tables import CidUserExamTable, CidUserTable, ExaminationTable
from generic.mixins import SuperuserRequiredMixin
import zipfile
from django.core.files.base import ContentFile
from .forms import (
CidGroupExamForm,
CidUserForm,
@@ -3189,3 +3193,34 @@ class ExaminationDelete(RevisionMixin, SuperuserRequiredMixin, DeleteView):
class ExaminationUpdate(UpdateView, SuperuserRequiredMixin):
model = Examination
form_class = ExaminationForm
class SeriesImagesZipViewBase(SuperuserRequiredMixin, View):
"""Download all images from an image series"""
http_method_names = ['get']
series_object = None
def get_files(self):
series = self.series_object.objects.get(pk=self.kwargs["pk"])
return [i.image.file for i in series.get_images()]
def get_archive_name(self, request):
#series = Series.objects.get(pk=self.kwargs["pk"])
return f"Series {self.kwargs['pk']}.zip"
def get(self, request, *args, **kwargs):
temp_file = ContentFile(b"", name=self.get_archive_name(request))
with zipfile.ZipFile(temp_file, mode='w', compression=zipfile.ZIP_DEFLATED) as zip_file:
files = self.get_files()
for file_ in files:
path = os.path.split(file_.name)[-1]
zip_file.writestr(path, file_.read())
file_size = temp_file.tell()
temp_file.seek(0)
response = HttpResponse(temp_file, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=%s' % self.get_archive_name(request)
response['Content-Length'] = file_size
return response