Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 4
0
    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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 def test_no_file_gives_error(self):
     root = DummyFolder().create_dummy_root_folder()
     r = Report(parent=root, file=None)
     with self.assertRaises(ValidationError):
         r.full_clean()
Esempio n. 8
0
 def test_empty_filename_gives_error(self):
     r = Report(filename="")
     with self.assertRaises(ValidationError):
         r.full_clean()
Esempio n. 9
0
 def test_no_filename_gives_error(self):
     r = Report(filename=None)
     with self.assertRaises(IntegrityError):
         r.save()
Esempio n. 10
0
 def test_empty_parent_gives_error(self):
     r = Report()
     with self.assertRaises(IntegrityError):
         r.save()
Esempio n. 11
0
    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