示例#1
0
def sanity_check():
    messages = sanity_checker.check_sanity()

    if len(messages) > 0:
        raise SanityFailedError(messages)
    else:
        return "No issues detected."
示例#2
0
 def test_orphaned_file(self):
     doc = self.make_test_data()
     Path(self.dirs.originals_dir, "orphaned").touch()
     messages = check_sanity()
     self.assertFalse(messages.has_error())
     self.assertTrue(messages.has_warning())
     self.assertEqual(len(messages), 1)
     self.assertRegex(messages[0]['message'], "Orphaned file in media dir")
示例#3
0
 def test_empty_content(self):
     doc = self.make_test_data()
     doc.content = ""
     doc.save()
     messages = check_sanity()
     self.assertFalse(messages.has_error())
     self.assertFalse(messages.has_warning())
     self.assertEqual(len(messages), 1)
     self.assertRegex(messages[0]['message'], "Document .* has no content.")
示例#4
0
 def test_error_tostring(self):
     Document.objects.create(title="test",
                             checksum="dgfhj",
                             archive_checksum="dfhg",
                             content="",
                             pk=1,
                             filename="0000001.pdf",
                             archive_filename="0000001.pdf")
     string = str(SanityFailedError(check_sanity()))
     self.assertIsNotNone(string)
示例#5
0
def sanity_check():
    messages = sanity_checker.check_sanity()

    messages.log_messages()

    if messages.has_error():
        raise SanityCheckFailedException(
            "Sanity check failed with errors. See log.")
    elif messages.has_warning():
        return "Sanity check exited with warnings. See log."
    elif len(messages) > 0:
        return "Sanity check exited with infos. See log."
    else:
        return "No issues detected."
示例#6
0
 def test_archive_checksum_mismatch(self):
     doc = self.make_test_data()
     doc.archive_checksum = "WOW"
     doc.save()
     self.assertEqual(len(check_sanity()), 1)
    def handle(self, *args, **options):

        messages = check_sanity(progress=not options['no_progress_bar'])

        messages.log_messages()
示例#8
0
 def test_success(self):
     self.make_test_data()
     self.assertEqual(len(check_sanity()), 0)
示例#9
0
    def handle(self, *args, **options):

        messages = check_sanity(progress=True)

        messages.log_messages()
示例#10
0
 def test_archive_checksum_no_filename(self):
     doc = self.make_test_data()
     doc.archive_filename = None
     doc.save()
     self.assertEqual(len(check_sanity()), 2)
示例#11
0
 def test_all(self):
     Document.objects.create(title="test", checksum="dgfhj", archive_checksum="dfhg", content="", pk=1, filename="0000001.pdf")
     string = str(SanityFailedError(check_sanity()))
示例#12
0
 def assertSanityError(self, messageRegex):
     messages = check_sanity()
     self.assertTrue(messages.has_error())
     self.assertRegex(messages[0]['message'], messageRegex)
示例#13
0
    def test_exporter(self, use_filename_format=False):
        shutil.rmtree(os.path.join(self.dirs.media_dir, "documents"))
        shutil.copytree(
            os.path.join(os.path.dirname(__file__), "samples", "documents"),
            os.path.join(self.dirs.media_dir, "documents"))

        manifest = self._do_export(use_filename_format=use_filename_format)

        self.assertEqual(len(manifest), 7)
        self.assertEqual(
            len(
                list(
                    filter(lambda e: e['model'] == 'documents.document',
                           manifest))), 4)

        self.assertTrue(
            os.path.exists(os.path.join(self.target, "manifest.json")))

        self.assertEqual(
            self._get_document_from_manifest(manifest,
                                             self.d1.id)['fields']['title'],
            "wow1")
        self.assertEqual(
            self._get_document_from_manifest(manifest,
                                             self.d2.id)['fields']['title'],
            "wow2")
        self.assertEqual(
            self._get_document_from_manifest(manifest,
                                             self.d3.id)['fields']['title'],
            "wow2")
        self.assertEqual(
            self._get_document_from_manifest(manifest,
                                             self.d4.id)['fields']['title'],
            "wow_dec")

        for element in manifest:
            if element['model'] == 'documents.document':
                fname = os.path.join(
                    self.target, element[document_exporter.EXPORTER_FILE_NAME])
                self.assertTrue(os.path.exists(fname))
                self.assertTrue(
                    os.path.exists(
                        os.path.join(
                            self.target, element[
                                document_exporter.EXPORTER_THUMBNAIL_NAME])))

                with open(fname, "rb") as f:
                    checksum = hashlib.md5(f.read()).hexdigest()
                self.assertEqual(checksum, element['fields']['checksum'])

                self.assertEqual(element['fields']['storage_type'],
                                 Document.STORAGE_TYPE_UNENCRYPTED)

                if document_exporter.EXPORTER_ARCHIVE_NAME in element:
                    fname = os.path.join(
                        self.target,
                        element[document_exporter.EXPORTER_ARCHIVE_NAME])
                    self.assertTrue(os.path.exists(fname))

                    with open(fname, "rb") as f:
                        checksum = hashlib.md5(f.read()).hexdigest()
                    self.assertEqual(checksum,
                                     element['fields']['archive_checksum'])

        with paperless_environment() as dirs:
            self.assertEqual(Document.objects.count(), 4)
            Document.objects.all().delete()
            Correspondent.objects.all().delete()
            DocumentType.objects.all().delete()
            Tag.objects.all().delete()
            self.assertEqual(Document.objects.count(), 0)

            call_command('document_importer', self.target)
            self.assertEqual(Document.objects.count(), 4)
            self.assertEqual(Tag.objects.count(), 1)
            self.assertEqual(Correspondent.objects.count(), 1)
            self.assertEqual(DocumentType.objects.count(), 1)
            self.assertEqual(Document.objects.get(id=self.d1.id).title, "wow1")
            self.assertEqual(Document.objects.get(id=self.d2.id).title, "wow2")
            self.assertEqual(Document.objects.get(id=self.d3.id).title, "wow2")
            self.assertEqual(
                Document.objects.get(id=self.d4.id).title, "wow_dec")
            messages = check_sanity()
            # everything is alright after the test
            self.assertEqual(len(messages), 0, str([str(m) for m in messages]))
示例#14
0
 def test_archive_no_access(self):
     doc = self.make_test_data()
     os.chmod(doc.archive_path, 0o000)
     self.assertEqual(len(check_sanity()), 1)
     os.chmod(doc.archive_path, 0o777)
示例#15
0
 def test_no_archive(self):
     doc = self.make_test_data()
     os.remove(doc.archive_path)
     self.assertEqual(len(check_sanity()), 1)
示例#16
0
 def test_original_no_access(self):
     doc = self.make_test_data()
     os.chmod(doc.source_path, 0o000)
     self.assertEqual(len(check_sanity()), 1)
     os.chmod(doc.source_path, 0o777)
示例#17
0
 def test_no_original(self):
     doc = self.make_test_data()
     os.remove(doc.source_path)
     self.assertEqual(len(check_sanity()), 1)
示例#18
0
 def test_no_thumbnail(self):
     doc = self.make_test_data()
     os.remove(doc.thumbnail_path)
     self.assertEqual(len(check_sanity()), 1)
示例#19
0
 def test_no_docs(self):
     self.assertEqual(len(check_sanity()), 0)
示例#20
0
 def test_empty_content(self):
     doc = self.make_test_data()
     doc.content = ""
     doc.save()
     self.assertEqual(len(check_sanity()), 1)
示例#21
0
    def test_exporter(self):
        shutil.rmtree(os.path.join(self.dirs.media_dir, "documents"))
        shutil.copytree(
            os.path.join(os.path.dirname(__file__), "samples", "documents"),
            os.path.join(self.dirs.media_dir, "documents"))

        file = os.path.join(self.dirs.originals_dir, "0000001.pdf")

        Document.objects.create(
            content="Content",
            checksum="42995833e01aea9b3edee44bbfdd7ce1",
            archive_checksum="62acb0bcbfbcaa62ca6ad3668e4e404b",
            title="wow",
            filename="0000001.pdf",
            mime_type="application/pdf")
        Document.objects.create(content="Content",
                                checksum="9c9691e51741c1f4f41a20896af31770",
                                title="wow",
                                filename="0000002.pdf.gpg",
                                mime_type="application/pdf",
                                storage_type=Document.STORAGE_TYPE_GPG)
        Tag.objects.create(name="t")
        DocumentType.objects.create(name="dt")
        Correspondent.objects.create(name="c")

        target = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, target)

        call_command('document_exporter', target)

        with open(os.path.join(target, "manifest.json")) as f:
            manifest = json.load(f)

        self.assertEqual(len(manifest), 5)

        for element in manifest:
            if element['model'] == 'documents.document':
                fname = os.path.join(
                    target, element[document_exporter.EXPORTER_FILE_NAME])
                self.assertTrue(os.path.exists(fname))
                self.assertTrue(
                    os.path.exists(
                        os.path.join(
                            target, element[
                                document_exporter.EXPORTER_THUMBNAIL_NAME])))

                with open(fname, "rb") as f:
                    checksum = hashlib.md5(f.read()).hexdigest()
                self.assertEqual(checksum, element['fields']['checksum'])

                if document_exporter.EXPORTER_ARCHIVE_NAME in element:
                    fname = os.path.join(
                        target,
                        element[document_exporter.EXPORTER_ARCHIVE_NAME])
                    self.assertTrue(os.path.exists(fname))

                    with open(fname, "rb") as f:
                        checksum = hashlib.md5(f.read()).hexdigest()
                    self.assertEqual(checksum,
                                     element['fields']['archive_checksum'])

        with paperless_environment() as dirs:
            call_command('document_importer', target)
            messages = check_sanity()
            # everything is alright after the test
            self.assertEqual(len(messages), 0, str([str(m) for m in messages]))
示例#22
0
 def test_orphaned_file(self):
     doc = self.make_test_data()
     Path(self.dirs.originals_dir, "orphaned").touch()
     self.assertEqual(len(check_sanity()), 1)