def processing(self, request, folder, rqst, msg): # Умови при яких зміни не відбудуться: if False: # Тут вставити перевірку на право завантаження теки msg.title = rqst.name msg.type = msgType.Forbidden msg.message = "У Вас немає доступу для завантаження обраної теки." response = HttpResponse() else: response, zipFilename, msg_message = \ response_for_download_zip(folder) msg.title = zipFilename msg.type = msgType.Normal msg.message = msg_message or "Вміст теки успішно завантажено!" return folder, msg, response
def test_response_for_download_zip_gives_proper_value(self): zipFilename = "%s.zip" % self.root.name fn = ' filename="%s";' % transliterate(zipFilename) fns = " filename*=utf-8''%s;" % urlquote(zipFilename) expected_content_disposition = 'attachment' + fn + fns resp, zipFilename, msg = response_for_download_zip(self.root) self.assertEqual(zipFilename, 'Тека файлів.zip') self.assertEqual(msg, "") self.assertEqual(resp.get('Content-Disposition'), expected_content_disposition) self.assertEqual(resp.get('Content-Length'), '232') self.assertEqual(resp.get('Content-Type'), 'application/zip') expected_namelist = ['Тека файлів/Текстовий файл.txt'] bio = BytesIO() # Open ByteIO to grab in-memory file bio.write(resp.content) # записуємо вміст у "файл" zipFile = zipfile.ZipFile(bio) # "файл" як zipfile self.assertIsNone(zipFile.testzip()) self.assertEqual(zipFile.namelist(), expected_namelist)
def test_response_for_download_zip_gives_proper_value_3(self): file2 = SimpleUploadedFile("file2.txt", b"file_content") report2 = DummyFolder().create_dummy_report(self.root, file=file2) zipFilename = "%s.zip" % self.root.name fn = ' filename="%s";' % transliterate(zipFilename) fns = " filename*=utf-8''%s;" % urlquote(zipFilename) expected_content_disposition = 'attachment' + fn + fns resp, zipFilename, msg = response_for_download_zip(self.root, 15) self.assertEqual(zipFilename, 'Тека файлів.zip') self.assertEqual(msg, 'Завеликий zip. Решту файлів відкинуто') self.assertEqual(resp.get('Content-Disposition'), expected_content_disposition) self.assertEqual(resp.get('Content-Length'), '232') self.assertEqual(resp.get('Content-Type'), 'application/zip') # self.assertEqual(resp.content, b'file_content') report2.file.delete()
def test_response_for_download_zip_gives_error_if_no_file(self): DummyFolder().create_dummy_report(parent=self.root) with self.assertRaises(ValueError): response_for_download_zip(self.root)
def folderDownload(request, *args, **kwargs): # Завантаження zip-файла, який складається з всіх файлів теки folder_id = kwargs.get("pk") folder = Folder.objects.get(id=folder_id) response, zipFilename, msg = response_for_download_zip(folder) return response