Beispiel #1
0
    def handle(self, *args, **options):

        skip_ocr = options.get('skip_ocr')

        if options.get('location') is None:
            logger.error("Please add the path to your backup.tar")
        else:
            with open(options.get('location'), 'rb') as restore_file:
                if _can_restore(restore_file):
                    if options.get('user') is None:
                        username = input("Username:"******"Archive can be handled."
                        "Please enter the user (username of) that should"
                        " own the restored documents."
                    )

                    if _is_valid_user(username):
                        restore_documents(
                            restore_file=restore_file,
                            username=username,
                            skip_ocr=skip_ocr
                        )
                    else:
                        logging.error("User %s was not valid", username)
                else:
                    logging.error(
                        "Archive cannot be restored because of"
                        " version mismatch."
                    )
Beispiel #2
0
    def handle(self, *args, **options):

        username = options.get('user')

        user = None
        if username:
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                logger.error(
                    f"Username {username} not found."
                )
                return

        if options.get('location') is None:
            logger.error("Please add the path to your backup.tar")
        else:
            with open(options.get('location'), 'rb') as restore_file:
                if _can_restore(restore_file):
                    restore_documents(
                        restore_file=restore_file,
                        user=user,
                        skip_ocr=True
                    )
                else:
                    logging.error(
                        "Archive cannot be restored because of"
                        " version mismatch."
                    )
Beispiel #3
0
    def test_backup_single_document(self):
        document_path = os.path.join(
            BASE_DIR, "data", "berlin.pdf"
        )
        doc = Document.create_document(
            user=self.testcase_user,
            title='berlin.pdf',
            size=os.path.getsize(document_path),
            lang='deu',
            file_name='berlin.pdf',
            parent_id=None,
            page_count=3
        )

        default_storage.copy_doc(
            src=document_path,
            dst=doc.path.url(),
        )

        with io.BytesIO() as memoryfile:
            backup_documents(memoryfile, self.testcase_user)
            memoryfile.seek(0)

            self.assertTrue(
                _can_restore(memoryfile),
                'generated backup.tar is not valid'
            )
            memoryfile.seek(0)

            backup_file = tarfile.open(fileobj=memoryfile, mode='r')
            backup_json = backup_file.extractfile('backup.json')
            backup_info = json.loads(backup_json.read())

            self.assertIsNotNone(
                backup_info.get('documents'),
                'backup.json did not have a key "documents"'
            )
            self.assertIs(
                len(backup_info.get('documents')), 1,
                'backup.json key documents had more or less than one entry'
            )
            self.assertIs(
                len(backup_file.getnames()),
                2,
                'backup.tar had more or less than 2 entries'
            )
            self.assertTrue(
                'berlin.pdf' in backup_file.getnames(),
                'berlin.pdf was not in the backup.tar'
            )
Beispiel #4
0
    def handle(self, *args, **options):
        if options.get('location') is None:
            logger.error("Please add the path to your backup.tar")
        else:
            with open(options.get('location'), 'rb') as restore_file:
                if _can_restore(restore_file):
                    if options.get('user') is None:
                        username = input("Username:"******"We can handle that archive. Please enter the user that should own the restored documents."
                    )

                    if _is_valid_user(username):
                        restore_documents(restore_file, username)
                    else:
                        logging.error("User %s was not valid", username)
                else:
                    logging.error(
                        "Looks like we can't understand your archive. Please make sure it is valid!"
                    )
    def test_backup_document_hierachy(self):
        folder_1 = Folder.objects.create(title='1',
                                         parent=None,
                                         user=self.testcase_user)
        folder_2 = Folder.objects.create(title='2',
                                         parent=folder_1,
                                         user=self.testcase_user)
        folder_3 = Folder.objects.create(title='3',
                                         parent=folder_1,
                                         user=self.testcase_user)
        Folder.objects.create(title='4', parent=None, user=self.testcase_user)

        document_path = os.path.join(BASE_DIR, "data", "berlin.pdf")

        doc_1 = Document.create_document(user=self.testcase_user,
                                         title='berlin.pdf',
                                         size=os.path.getsize(document_path),
                                         lang='deu',
                                         file_name='berlin.pdf',
                                         parent_id=folder_2.id,
                                         page_count=3)

        default_storage.copy_doc(
            src=document_path,
            dst=doc_1.path.url(),
        )

        doc_2 = Document.create_document(user=self.testcase_user,
                                         title='berlin.pdf',
                                         size=os.path.getsize(document_path),
                                         lang='deu',
                                         file_name='berlin.pdf',
                                         parent_id=folder_3.id,
                                         page_count=3)

        default_storage.copy_doc(
            src=document_path,
            dst=doc_2.path.url(),
        )

        with io.BytesIO() as memoryfile:
            backup_documents(memoryfile, self.testcase_user)
            memoryfile.seek(0)

            self.assertTrue(_can_restore(memoryfile),
                            'generated backup.tar is not valid')
            memoryfile.seek(0)

            backup_file = tarfile.open(fileobj=memoryfile, mode='r')
            backup_json = backup_file.extractfile('backup.json')
            backup_info = json.loads(backup_json.read())

            self.assertIsNotNone(backup_info.get('documents'),
                                 'backup.json did not have a key "documents"')
            self.assertIs(
                len(backup_info.get('documents')), 2,
                'backup.json key documents had more or less than two entry')
            self.assertIs(len(backup_file.getnames()), 3,
                          'backup.tar had more or less than 2 entries')
            self.assertTrue(
                f"1/2/berlin.pdf__{doc_1.id}" in backup_file.getnames(),
                'berlin.pdf was not in the backup.tar at folder 1/2/')
            self.assertTrue(
                f"1/3/berlin.pdf__{doc_2.id}" in backup_file.getnames(),
                'berlin.pdf was not in the backup.tar at folder 1/3/')
            self.assertFalse(
                '4' in backup_file.getnames(),
                'Folder 4 was in backup.tar but should have been ignored')