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 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