def test_fileNameCheckInsert_4(self):
     fileName = 'gama.txt'
     expected = 'gama (3).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList),
                      expected)
 def test_fileNameCheckInsert_2(self):
     fileName = 'alfa.txt'
     expected = 'alfa (1).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList),
                      expected)
 def test_fileNameCheckInsert_3(self):
     fileName = 'beta.txt'
     expected = 'beta (2).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList),
                      expected)
    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
Exemplo n.º 5
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
Exemplo n.º 6
0
 def test_fileNameCheckInsert_4(self):
     fileName = 'gama.txt'
     expected = 'gama (3).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList), expected)
Exemplo n.º 7
0
 def test_fileNameCheckInsert_3(self):
     fileName = 'beta.txt'
     expected = 'beta (2).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList), expected)
Exemplo n.º 8
0
 def test_fileNameCheckInsert_2(self):
     fileName = 'alfa.txt'
     expected = 'alfa (1).txt'
     self.assertEqual(fileNameCheckInsert(fileName, self.fileNameList), expected)