def test_saving_and_retrieving_reports(self): folder = Folder() folder.save() first_report = Report() first_report.filename = 'The first (ever) folder report' first_report.parent = folder first_report.save() second_report = Report() second_report.filename = 'Report the second' second_report.parent = folder second_report.save() saved_folder = Folder.objects.first() self.assertEqual(saved_folder, folder) saved_reports = Report.objects.all() self.assertEqual(saved_reports.count(), 2) first_saved_report = saved_reports[0] second_saved_report = saved_reports[1] self.assertEqual(first_saved_report.filename, 'The first (ever) folder report') self.assertEqual(first_saved_report.parent, folder) self.assertEqual(second_saved_report.filename, 'Report the second') self.assertEqual(second_saved_report.parent, folder)
def create_dummy_report(self, parent, id=None, filename=None, uploaded_on=None, user=None, file=None, path=None): if path and not file: # вказано шлях до реального файла на диску: with open(path, "rb") as f: file_content = f.read() filename = filename or os.path.basename(path) file = SimpleUploadedFile(filename, file_content) # створюємо файл: report = Report(parent=parent, id=id, file=file, user=user, filename=filename, uploaded_on=uploaded_on) report.save() # print('created report:', report) return report
def create_dummy_report(self, parent, id=None, filename=None, uploaded_on=None, user=None, file=None, path=None): if path and not file: # вказано шлях до реального файла на диску: with open(path, 'rb') as f: file_content = f.read() filename = filename or os.path.basename(path) file = SimpleUploadedFile(filename, file_content) # створюємо файл: report = Report(parent=parent, id=id, file=file, user=user, filename=filename, uploaded_on=uploaded_on) report.save() # print('created report:', report) return report
def processing(self, request, report, rqst, msg): maxFileSize = MAX_FILE_SIZE report_name_list = [f.filename for f in Report.objects.filter(parent_id=rqst.parent_id)] # Умови при яких зміни не відбудуться: if not rqst.fileName or rqst.fileName == "": msg.title = "Заладування файла" msg.type = msgType.IncorrectData msg.message = "Ви не вказали назву файла!" elif int(rqst.fileSize) > maxFileSize: msg.title = "Заладування файла" msg.type = msgType.Forbidden msg.message = "Розмір файла %s перевищує дозволене значення %s!" \ % (rqst.fileSize, maxFileSize) else: # Починаємо заладування: rqst.fileName = fileNameCheckInsert(rqst.fileName, report_name_list) report = Report() report.parent = Folder.objects.get(id=rqst.parent_id) report.save() # зберігаємо "сирий" примірник щоб отримати id # при цьому файл ще не зберігається rqst.id = report.id # Файл буде збережено під кодовою назвою # Схоже, що ця назва не береться до уваги, # бо в моделі працює upload_to codedFileName = str(report.pk) + ".upl" # Збереження власне файла try: report.file.save(codedFileName, ContentFile(request.body)) except: # Помилка збереження, найімовірніше - файл завеликий print('Saving error. Probably file too large') # Видаляємо з бази і з диска недозбережений файл: try: report.file.delete() # файл видалено з диска print('file deleted') except: print('file was not saved') report.delete() # файл видалено з бази даних print('report deleted') msg.title = rqst.fileName msg.type = msgType.Error msg.message = "Заладування на сервер прининене!" \ "Очевидно, файл занадто великий." else: # Завантаження пройшло без помилок report.filename = rqst.fileName fileSizeFact = report.file.size if fileSizeFact == int(rqst.fileSize): # Файл завантажено повністю report.uploaded_on = rqst.fileLastModifiedDate or timezone.now() report.save() # остаточне збереження примірника моделі # Витягуємо щойно збережене з бази, щоб мати # правильно відформатовані дані, зокрема дату report = Report.objects.get(id=rqst.id) # TODO-перевірити чому filesize.js для NewRow показує розмір без одиниць виміру msg.title = rqst.fileName msg.type = msgType.NewRow msg.message = "Файл успішно заладовано на сервер!" else: # Файл завантажено частково - клієнт послав xhr.abort() print('Error: fileSizeFact <> fileSize') # Видаляємо з бази і з диска недозбережений файл: report.file.delete() # файл видалено з диска print('file deleted') report.delete() # файл видалено з бази даних print('report deleted') msg.title = rqst.fileName msg.type = msgType.Error msg.message = "Заладування на сервер перерване!" response = HttpResponse() return report, msg, response
def test_get_absolute_url_not_viewable_2(self): folder = Folder.objects.create() report = Report(parent=folder, filename="example.mdb") report.save() expected = reverse('folders:report-detail', kwargs={'pk': report.pk}) self.assertEqual(report.get_absolute_url(), expected)
def test_get_absolute_url_viewable(self): folder = Folder.objects.create() report = Report(parent=folder, filename='example.jpg') report.save() expected = reverse('folders:report-preview', kwargs={'pk': report.pk}) self.assertEqual(report.get_absolute_url(), expected)
def test_no_filename_gives_error(self): r = Report(filename=None) with self.assertRaises(IntegrityError): r.save()
def test_empty_parent_gives_error(self): r = Report() with self.assertRaises(IntegrityError): r.save()