mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-06-08 14:17:26 -05:00
Chore: use pathlib in remaining tests
This commit is contained in:
parent
4e082f997c
commit
bc2facc87f
@ -221,15 +221,6 @@ lint.per-file-ignores."src/documents/parsers.py" = [
|
|||||||
lint.per-file-ignores."src/documents/signals/handlers.py" = [
|
lint.per-file-ignores."src/documents/signals/handlers.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
lint.per-file-ignores."src/documents/tests/test_consumer.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_file_handling.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_migration_archive_files.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/views.py" = [
|
lint.per-file-ignores."src/documents/views.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import os
|
|
||||||
import shutil
|
import shutil
|
||||||
import stat
|
import stat
|
||||||
import tempfile
|
import tempfile
|
||||||
@ -66,7 +65,7 @@ class CopyParser(_BaseTestParser):
|
|||||||
|
|
||||||
def parse(self, document_path, mime_type, file_name=None):
|
def parse(self, document_path, mime_type, file_name=None):
|
||||||
self.text = "The text"
|
self.text = "The text"
|
||||||
self.archive_path = os.path.join(self.tempdir, "archive.pdf")
|
self.archive_path = Path(self.tempdir / "archive.pdf")
|
||||||
shutil.copy(document_path, self.archive_path)
|
shutil.copy(document_path, self.archive_path)
|
||||||
|
|
||||||
|
|
||||||
@ -96,15 +95,16 @@ class FaultyGenericExceptionParser(_BaseTestParser):
|
|||||||
|
|
||||||
def fake_magic_from_file(file, *, mime=False):
|
def fake_magic_from_file(file, *, mime=False):
|
||||||
if mime:
|
if mime:
|
||||||
if file.name.startswith("invalid_pdf"):
|
filepath = Path(file)
|
||||||
|
if filepath.name.startswith("invalid_pdf"):
|
||||||
return "application/octet-stream"
|
return "application/octet-stream"
|
||||||
if os.path.splitext(file)[1] == ".pdf":
|
if filepath.suffix == ".pdf":
|
||||||
return "application/pdf"
|
return "application/pdf"
|
||||||
elif os.path.splitext(file)[1] == ".png":
|
elif filepath.suffix == ".png":
|
||||||
return "image/png"
|
return "image/png"
|
||||||
elif os.path.splitext(file)[1] == ".webp":
|
elif filepath.suffix == ".webp":
|
||||||
return "image/webp"
|
return "image/webp"
|
||||||
elif os.path.splitext(file)[1] == ".eml":
|
elif filepath.suffix == ".eml":
|
||||||
return "message/rfc822"
|
return "message/rfc822"
|
||||||
else:
|
else:
|
||||||
return "unknown"
|
return "unknown"
|
||||||
@ -225,7 +225,7 @@ class TestConsumer(
|
|||||||
self.assertEqual(document.content, "The Text")
|
self.assertEqual(document.content, "The Text")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
document.title,
|
document.title,
|
||||||
os.path.splitext(os.path.basename(filename))[0],
|
Path(filename).stem,
|
||||||
)
|
)
|
||||||
self.assertIsNone(document.correspondent)
|
self.assertIsNone(document.correspondent)
|
||||||
self.assertIsNone(document.document_type)
|
self.assertIsNone(document.document_type)
|
||||||
@ -254,7 +254,7 @@ class TestConsumer(
|
|||||||
# https://github.com/jonaswinkler/paperless-ng/discussions/1037
|
# https://github.com/jonaswinkler/paperless-ng/discussions/1037
|
||||||
|
|
||||||
filename = self.get_test_file()
|
filename = self.get_test_file()
|
||||||
shadow_file = os.path.join(self.dirs.scratch_dir, "._sample.pdf")
|
shadow_file = Path(self.dirs.scratch_dir / "._sample.pdf")
|
||||||
|
|
||||||
shutil.copy(filename, shadow_file)
|
shutil.copy(filename, shadow_file)
|
||||||
|
|
||||||
@ -1082,8 +1082,8 @@ class PreConsumeTestCase(DirectoriesMixin, GetConsumerMixin, TestCase):
|
|||||||
outfile.write("echo This message goes to stderr >&2")
|
outfile.write("echo This message goes to stderr >&2")
|
||||||
|
|
||||||
# Make the file executable
|
# Make the file executable
|
||||||
st = os.stat(script.name)
|
st = Path(script.name).stat()
|
||||||
os.chmod(script.name, st.st_mode | stat.S_IEXEC)
|
Path(script.name).chmod(st.st_mode | stat.S_IEXEC)
|
||||||
|
|
||||||
with override_settings(PRE_CONSUME_SCRIPT=script.name):
|
with override_settings(PRE_CONSUME_SCRIPT=script.name):
|
||||||
with self.assertLogs("paperless.consumer", level="INFO") as cm:
|
with self.assertLogs("paperless.consumer", level="INFO") as cm:
|
||||||
@ -1114,8 +1114,8 @@ class PreConsumeTestCase(DirectoriesMixin, GetConsumerMixin, TestCase):
|
|||||||
outfile.write("exit 100\n")
|
outfile.write("exit 100\n")
|
||||||
|
|
||||||
# Make the file executable
|
# Make the file executable
|
||||||
st = os.stat(script.name)
|
st = Path(script.name).stat()
|
||||||
os.chmod(script.name, st.st_mode | stat.S_IEXEC)
|
Path(script.name).chmod(st.st_mode | stat.S_IEXEC)
|
||||||
|
|
||||||
with override_settings(PRE_CONSUME_SCRIPT=script.name):
|
with override_settings(PRE_CONSUME_SCRIPT=script.name):
|
||||||
with self.get_consumer(self.test_file) as c:
|
with self.get_consumer(self.test_file) as c:
|
||||||
@ -1237,8 +1237,8 @@ class PostConsumeTestCase(DirectoriesMixin, GetConsumerMixin, TestCase):
|
|||||||
outfile.write("exit -500\n")
|
outfile.write("exit -500\n")
|
||||||
|
|
||||||
# Make the file executable
|
# Make the file executable
|
||||||
st = os.stat(script.name)
|
st = Path(script.name).stat()
|
||||||
os.chmod(script.name, st.st_mode | stat.S_IEXEC)
|
Path(script.name).chmod(st.st_mode | stat.S_IEXEC)
|
||||||
|
|
||||||
with override_settings(POST_CONSUME_SCRIPT=script.name):
|
with override_settings(POST_CONSUME_SCRIPT=script.name):
|
||||||
doc = Document.objects.create(title="Test", mime_type="application/pdf")
|
doc = Document.objects.create(title="Test", mime_type="application/pdf")
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import tempfile
|
import tempfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
@ -71,7 +70,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
# test that creating dirs for the source_path creates the correct directory
|
# test that creating dirs for the source_path creates the correct directory
|
||||||
create_source_path_directory(document.source_path)
|
create_source_path_directory(document.source_path)
|
||||||
Path(document.source_path).touch()
|
Path(document.source_path).touch()
|
||||||
self.assertIsDir(os.path.join(settings.ORIGINALS_DIR, "none"))
|
self.assertIsDir(settings.ORIGINALS_DIR / "none")
|
||||||
|
|
||||||
# Set a correspondent and save the document
|
# Set a correspondent and save the document
|
||||||
document.correspondent = Correspondent.objects.get_or_create(name="test")[0]
|
document.correspondent = Correspondent.objects.get_or_create(name="test")[0]
|
||||||
@ -108,7 +107,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Make the folder read- and execute-only (no writing and no renaming)
|
# Make the folder read- and execute-only (no writing and no renaming)
|
||||||
os.chmod(os.path.join(settings.ORIGINALS_DIR, "none"), 0o555)
|
(settings.ORIGINALS_DIR / "none").chmod(0o555)
|
||||||
|
|
||||||
# Set a correspondent and save the document
|
# Set a correspondent and save the document
|
||||||
document.correspondent = Correspondent.objects.get_or_create(name="test")[0]
|
document.correspondent = Correspondent.objects.get_or_create(name="test")[0]
|
||||||
@ -120,7 +119,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(document.filename, "none/none.pdf")
|
self.assertEqual(document.filename, "none/none.pdf")
|
||||||
|
|
||||||
os.chmod(os.path.join(settings.ORIGINALS_DIR, "none"), 0o777)
|
(settings.ORIGINALS_DIR / "none").chmod(0o777)
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{correspondent}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{correspondent}")
|
||||||
def test_file_renaming_database_error(self):
|
def test_file_renaming_database_error(self):
|
||||||
@ -160,7 +159,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
# Check proper handling of files
|
# Check proper handling of files
|
||||||
self.assertIsFile(document.source_path)
|
self.assertIsFile(document.source_path)
|
||||||
self.assertIsFile(
|
self.assertIsFile(
|
||||||
os.path.join(settings.ORIGINALS_DIR, "none/none.pdf"),
|
settings.ORIGINALS_DIR / "none" / "none.pdf",
|
||||||
)
|
)
|
||||||
self.assertEqual(document.filename, "none/none.pdf")
|
self.assertEqual(document.filename, "none/none.pdf")
|
||||||
|
|
||||||
@ -183,9 +182,9 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
document.delete()
|
document.delete()
|
||||||
empty_trash([document.pk])
|
empty_trash([document.pk])
|
||||||
self.assertIsNotFile(
|
self.assertIsNotFile(
|
||||||
os.path.join(settings.ORIGINALS_DIR, "none", "none.pdf"),
|
settings.ORIGINALS_DIR / "none" / "none.pdf",
|
||||||
)
|
)
|
||||||
self.assertIsNotDir(os.path.join(settings.ORIGINALS_DIR, "none"))
|
self.assertIsNotDir(settings.ORIGINALS_DIR / "none")
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
FILENAME_FORMAT="{correspondent}/{correspondent}",
|
FILENAME_FORMAT="{correspondent}/{correspondent}",
|
||||||
@ -206,15 +205,15 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
Path(document.source_path).touch()
|
Path(document.source_path).touch()
|
||||||
|
|
||||||
# Ensure file was moved to trash after delete
|
# Ensure file was moved to trash after delete
|
||||||
self.assertIsNotFile(os.path.join(settings.EMPTY_TRASH_DIR, "none", "none.pdf"))
|
self.assertIsNotFile(Path(settings.EMPTY_TRASH_DIR) / "none" / "none.pdf")
|
||||||
document.delete()
|
document.delete()
|
||||||
empty_trash([document.pk])
|
empty_trash([document.pk])
|
||||||
self.assertIsNotFile(
|
self.assertIsNotFile(
|
||||||
os.path.join(settings.ORIGINALS_DIR, "none", "none.pdf"),
|
settings.ORIGINALS_DIR / "none" / "none.pdf",
|
||||||
)
|
)
|
||||||
self.assertIsNotDir(os.path.join(settings.ORIGINALS_DIR, "none"))
|
self.assertIsNotDir(settings.ORIGINALS_DIR / "none")
|
||||||
self.assertIsFile(os.path.join(settings.EMPTY_TRASH_DIR, "none.pdf"))
|
self.assertIsFile(Path(settings.EMPTY_TRASH_DIR) / "none.pdf")
|
||||||
self.assertIsNotFile(os.path.join(settings.EMPTY_TRASH_DIR, "none_01.pdf"))
|
self.assertIsNotFile(Path(settings.EMPTY_TRASH_DIR) / "none_01.pdf")
|
||||||
|
|
||||||
# Create an identical document and ensure it is trashed under a new name
|
# Create an identical document and ensure it is trashed under a new name
|
||||||
document = Document()
|
document = Document()
|
||||||
@ -227,7 +226,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
Path(document.source_path).touch()
|
Path(document.source_path).touch()
|
||||||
document.delete()
|
document.delete()
|
||||||
empty_trash([document.pk])
|
empty_trash([document.pk])
|
||||||
self.assertIsFile(os.path.join(settings.EMPTY_TRASH_DIR, "none_01.pdf"))
|
self.assertIsFile(Path(settings.EMPTY_TRASH_DIR) / "none_01.pdf")
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{correspondent}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{correspondent}")
|
||||||
def test_document_delete_nofile(self):
|
def test_document_delete_nofile(self):
|
||||||
@ -261,8 +260,8 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
document.save()
|
document.save()
|
||||||
|
|
||||||
# Check proper handling of files
|
# Check proper handling of files
|
||||||
self.assertIsDir(os.path.join(settings.ORIGINALS_DIR, "test"))
|
self.assertIsDir(settings.ORIGINALS_DIR / "test")
|
||||||
self.assertIsDir(os.path.join(settings.ORIGINALS_DIR, "none"))
|
self.assertIsDir(settings.ORIGINALS_DIR / "none")
|
||||||
self.assertIsFile(important_file)
|
self.assertIsFile(important_file)
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{document_type} - {title}")
|
@override_settings(FILENAME_FORMAT="{document_type} - {title}")
|
||||||
@ -371,16 +370,16 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
Path(document.source_path).touch()
|
Path(document.source_path).touch()
|
||||||
|
|
||||||
# Check proper handling of files
|
# Check proper handling of files
|
||||||
self.assertIsDir(os.path.join(settings.ORIGINALS_DIR, "none/none"))
|
self.assertIsDir(settings.ORIGINALS_DIR / "none" / "none")
|
||||||
|
|
||||||
document.delete()
|
document.delete()
|
||||||
empty_trash([document.pk])
|
empty_trash([document.pk])
|
||||||
|
|
||||||
self.assertIsNotFile(
|
self.assertIsNotFile(
|
||||||
os.path.join(settings.ORIGINALS_DIR, "none/none/none.pdf"),
|
settings.ORIGINALS_DIR / "none" / "none" / "none.pdf",
|
||||||
)
|
)
|
||||||
self.assertIsNotDir(os.path.join(settings.ORIGINALS_DIR, "none/none"))
|
self.assertIsNotDir(settings.ORIGINALS_DIR / "none" / "none")
|
||||||
self.assertIsNotDir(os.path.join(settings.ORIGINALS_DIR, "none"))
|
self.assertIsNotDir(settings.ORIGINALS_DIR / "none")
|
||||||
self.assertIsDir(settings.ORIGINALS_DIR)
|
self.assertIsDir(settings.ORIGINALS_DIR)
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{doc_pk}")
|
@override_settings(FILENAME_FORMAT="{doc_pk}")
|
||||||
@ -415,12 +414,12 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
(tmp / "notempty" / "empty").mkdir(exist_ok=True, parents=True)
|
(tmp / "notempty" / "empty").mkdir(exist_ok=True, parents=True)
|
||||||
|
|
||||||
delete_empty_directories(
|
delete_empty_directories(
|
||||||
os.path.join(tmp, "notempty", "empty"),
|
tmp / "notempty" / "empty",
|
||||||
root=settings.ORIGINALS_DIR,
|
root=settings.ORIGINALS_DIR,
|
||||||
)
|
)
|
||||||
self.assertIsDir(os.path.join(tmp, "notempty"))
|
self.assertIsDir(tmp / "notempty")
|
||||||
self.assertIsFile(os.path.join(tmp, "notempty", "file"))
|
self.assertIsFile(tmp / "notempty" / "file")
|
||||||
self.assertIsNotDir(os.path.join(tmp, "notempty", "empty"))
|
self.assertIsNotDir(tmp / "notempty" / "empty")
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{% if x is None %}/{title]")
|
@override_settings(FILENAME_FORMAT="{% if x is None %}/{title]")
|
||||||
def test_invalid_format(self):
|
def test_invalid_format(self):
|
||||||
@ -585,8 +584,8 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
|||||||
class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
||||||
@override_settings(FILENAME_FORMAT=None)
|
@override_settings(FILENAME_FORMAT=None)
|
||||||
def test_create_no_format(self):
|
def test_create_no_format(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -604,8 +603,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
||||||
def test_create_with_format(self):
|
def test_create_with_format(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -632,8 +631,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
||||||
def test_move_archive_gone(self):
|
def test_move_archive_gone(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
mime_type="application/pdf",
|
mime_type="application/pdf",
|
||||||
@ -651,9 +650,9 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
||||||
def test_move_archive_exists(self):
|
def test_move_archive_exists(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
existing_archive_file = os.path.join(settings.ARCHIVE_DIR, "none", "my_doc.pdf")
|
existing_archive_file = settings.ARCHIVE_DIR / "none" / "my_doc.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
(settings.ARCHIVE_DIR / "none").mkdir(parents=True, exist_ok=True)
|
(settings.ARCHIVE_DIR / "none").mkdir(parents=True, exist_ok=True)
|
||||||
@ -676,8 +675,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{title}")
|
@override_settings(FILENAME_FORMAT="{title}")
|
||||||
def test_move_original_only(self):
|
def test_move_original_only(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "document_01.pdf")
|
original = settings.ORIGINALS_DIR / "document_01.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "document.pdf")
|
archive = settings.ARCHIVE_DIR / "document.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
|
|
||||||
@ -698,8 +697,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{title}")
|
@override_settings(FILENAME_FORMAT="{title}")
|
||||||
def test_move_archive_only(self):
|
def test_move_archive_only(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "document.pdf")
|
original = settings.ORIGINALS_DIR / "document.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "document_01.pdf")
|
archive = settings.ARCHIVE_DIR / "document_01.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
|
|
||||||
@ -725,13 +724,13 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
if "archive" in str(src):
|
if "archive" in str(src):
|
||||||
raise OSError
|
raise OSError
|
||||||
else:
|
else:
|
||||||
os.remove(src)
|
Path(src).unlink()
|
||||||
Path(dst).touch()
|
Path(dst).touch()
|
||||||
|
|
||||||
m.side_effect = fake_rename
|
m.side_effect = fake_rename
|
||||||
|
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -751,8 +750,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
||||||
def test_move_file_gone(self):
|
def test_move_file_gone(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
# Path(original).touch()
|
# Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -776,13 +775,13 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
if "original" in str(src):
|
if "original" in str(src):
|
||||||
raise OSError
|
raise OSError
|
||||||
else:
|
else:
|
||||||
os.remove(src)
|
Path(src).unlink()
|
||||||
Path(dst).touch()
|
Path(dst).touch()
|
||||||
|
|
||||||
m.side_effect = fake_rename
|
m.side_effect = fake_rename
|
||||||
|
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -802,8 +801,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="")
|
@override_settings(FILENAME_FORMAT="")
|
||||||
def test_archive_deleted(self):
|
def test_archive_deleted(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document.objects.create(
|
doc = Document.objects.create(
|
||||||
@ -830,9 +829,9 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{title}")
|
@override_settings(FILENAME_FORMAT="{title}")
|
||||||
def test_archive_deleted2(self):
|
def test_archive_deleted2(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "document.webp")
|
original = settings.ORIGINALS_DIR / "document.webp"
|
||||||
original2 = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original2 = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(original2).touch()
|
Path(original2).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
@ -865,8 +864,8 @@ class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, Test
|
|||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
@override_settings(FILENAME_FORMAT="{correspondent}/{title}")
|
||||||
def test_database_error(self):
|
def test_database_error(self):
|
||||||
original = os.path.join(settings.ORIGINALS_DIR, "0000001.pdf")
|
original = settings.ORIGINALS_DIR / "0000001.pdf"
|
||||||
archive = os.path.join(settings.ARCHIVE_DIR, "0000001.pdf")
|
archive = settings.ARCHIVE_DIR / "0000001.pdf"
|
||||||
Path(original).touch()
|
Path(original).touch()
|
||||||
Path(archive).touch()
|
Path(archive).touch()
|
||||||
doc = Document(
|
doc = Document(
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
import importlib
|
import importlib
|
||||||
import os
|
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
@ -21,7 +20,7 @@ migration_1012_obj = importlib.import_module(
|
|||||||
|
|
||||||
|
|
||||||
def archive_name_from_filename(filename):
|
def archive_name_from_filename(filename):
|
||||||
return os.path.splitext(filename)[0] + ".pdf"
|
return Path(filename).stem + ".pdf"
|
||||||
|
|
||||||
|
|
||||||
def archive_path_old(self):
|
def archive_path_old(self):
|
||||||
@ -30,12 +29,12 @@ def archive_path_old(self):
|
|||||||
else:
|
else:
|
||||||
fname = f"{self.pk:07}.pdf"
|
fname = f"{self.pk:07}.pdf"
|
||||||
|
|
||||||
return os.path.join(settings.ARCHIVE_DIR, fname)
|
return Path(settings.ARCHIVE_DIR) / fname
|
||||||
|
|
||||||
|
|
||||||
def archive_path_new(doc):
|
def archive_path_new(doc):
|
||||||
if doc.archive_filename is not None:
|
if doc.archive_filename is not None:
|
||||||
return os.path.join(settings.ARCHIVE_DIR, str(doc.archive_filename))
|
return Path(settings.ARCHIVE_DIR) / str(doc.archive_filename)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ def source_path(doc):
|
|||||||
if doc.storage_type == STORAGE_TYPE_GPG:
|
if doc.storage_type == STORAGE_TYPE_GPG:
|
||||||
fname += ".gpg" # pragma: no cover
|
fname += ".gpg" # pragma: no cover
|
||||||
|
|
||||||
return os.path.join(settings.ORIGINALS_DIR, fname)
|
return Path(settings.ORIGINALS_DIR) / fname
|
||||||
|
|
||||||
|
|
||||||
def thumbnail_path(doc):
|
def thumbnail_path(doc):
|
||||||
@ -56,7 +55,7 @@ def thumbnail_path(doc):
|
|||||||
if doc.storage_type == STORAGE_TYPE_GPG:
|
if doc.storage_type == STORAGE_TYPE_GPG:
|
||||||
file_name += ".gpg"
|
file_name += ".gpg"
|
||||||
|
|
||||||
return os.path.join(settings.THUMBNAIL_DIR, file_name)
|
return Path(settings.THUMBNAIL_DIR) / file_name
|
||||||
|
|
||||||
|
|
||||||
def make_test_document(
|
def make_test_document(
|
||||||
@ -76,7 +75,7 @@ def make_test_document(
|
|||||||
doc.save()
|
doc.save()
|
||||||
|
|
||||||
shutil.copy2(original, source_path(doc))
|
shutil.copy2(original, source_path(doc))
|
||||||
with open(original, "rb") as f:
|
with Path(original).open("rb") as f:
|
||||||
doc.checksum = hashlib.md5(f.read()).hexdigest()
|
doc.checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
|
|
||||||
if archive:
|
if archive:
|
||||||
@ -86,7 +85,7 @@ def make_test_document(
|
|||||||
else:
|
else:
|
||||||
shutil.copy2(archive, archive_path_old(doc))
|
shutil.copy2(archive, archive_path_old(doc))
|
||||||
|
|
||||||
with open(archive, "rb") as f:
|
with Path(archive).open("rb") as f:
|
||||||
doc.archive_checksum = hashlib.md5(f.read()).hexdigest()
|
doc.archive_checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
|
|
||||||
doc.save()
|
doc.save()
|
||||||
@ -96,25 +95,17 @@ def make_test_document(
|
|||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
|
||||||
simple_jpg = os.path.join(os.path.dirname(__file__), "samples", "simple.jpg")
|
simple_jpg = Path(__file__).parent / "samples" / "simple.jpg"
|
||||||
simple_pdf = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf")
|
simple_pdf = Path(__file__).parent / "samples" / "simple.pdf"
|
||||||
simple_pdf2 = os.path.join(
|
simple_pdf2 = (
|
||||||
os.path.dirname(__file__),
|
Path(__file__).parent / "samples" / "documents" / "originals" / "0000002.pdf"
|
||||||
"samples",
|
|
||||||
"documents",
|
|
||||||
"originals",
|
|
||||||
"0000002.pdf",
|
|
||||||
)
|
)
|
||||||
simple_pdf3 = os.path.join(
|
simple_pdf3 = (
|
||||||
os.path.dirname(__file__),
|
Path(__file__).parent / "samples" / "documents" / "originals" / "0000003.pdf"
|
||||||
"samples",
|
|
||||||
"documents",
|
|
||||||
"originals",
|
|
||||||
"0000003.pdf",
|
|
||||||
)
|
)
|
||||||
simple_txt = os.path.join(os.path.dirname(__file__), "samples", "simple.txt")
|
simple_txt = Path(__file__).parent / "samples" / "simple.txt"
|
||||||
simple_png = os.path.join(os.path.dirname(__file__), "samples", "simple-noalpha.png")
|
simple_png = Path(__file__).parent / "samples" / "simple-noalpha.png"
|
||||||
simple_png2 = os.path.join(os.path.dirname(__file__), "examples", "no-text.png")
|
simple_png2 = Path(__file__).parent / "examples" / "no-text.png"
|
||||||
|
|
||||||
|
|
||||||
@override_settings(FILENAME_FORMAT="")
|
@override_settings(FILENAME_FORMAT="")
|
||||||
@ -198,13 +189,13 @@ class TestMigrateArchiveFiles(DirectoriesMixin, FileSystemAssertsMixin, TestMigr
|
|||||||
else:
|
else:
|
||||||
self.assertIsNone(doc.archive_filename)
|
self.assertIsNone(doc.archive_filename)
|
||||||
|
|
||||||
with open(source_path(doc), "rb") as f:
|
with Path(source_path(doc)).open("rb") as f:
|
||||||
original_checksum = hashlib.md5(f.read()).hexdigest()
|
original_checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
self.assertEqual(original_checksum, doc.checksum)
|
self.assertEqual(original_checksum, doc.checksum)
|
||||||
|
|
||||||
if doc.archive_checksum:
|
if doc.archive_checksum:
|
||||||
self.assertIsFile(archive_path_new(doc))
|
self.assertIsFile(archive_path_new(doc))
|
||||||
with open(archive_path_new(doc), "rb") as f:
|
with archive_path_new(doc).open("rb") as f:
|
||||||
archive_checksum = hashlib.md5(f.read()).hexdigest()
|
archive_checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
self.assertEqual(archive_checksum, doc.archive_checksum)
|
self.assertEqual(archive_checksum, doc.archive_checksum)
|
||||||
|
|
||||||
@ -301,7 +292,7 @@ class TestMigrateArchiveFilesErrors(DirectoriesMixin, TestMigrations):
|
|||||||
"clash.pdf",
|
"clash.pdf",
|
||||||
simple_pdf,
|
simple_pdf,
|
||||||
)
|
)
|
||||||
os.unlink(archive_path_old(doc))
|
archive_path_old(doc).unlink()
|
||||||
|
|
||||||
self.assertRaisesMessage(
|
self.assertRaisesMessage(
|
||||||
ValueError,
|
ValueError,
|
||||||
@ -494,13 +485,13 @@ class TestMigrateArchiveFilesBackwards(
|
|||||||
for doc in Document.objects.all():
|
for doc in Document.objects.all():
|
||||||
if doc.archive_checksum:
|
if doc.archive_checksum:
|
||||||
self.assertIsFile(archive_path_old(doc))
|
self.assertIsFile(archive_path_old(doc))
|
||||||
with open(source_path(doc), "rb") as f:
|
with Path(source_path(doc)).open("rb") as f:
|
||||||
original_checksum = hashlib.md5(f.read()).hexdigest()
|
original_checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
self.assertEqual(original_checksum, doc.checksum)
|
self.assertEqual(original_checksum, doc.checksum)
|
||||||
|
|
||||||
if doc.archive_checksum:
|
if doc.archive_checksum:
|
||||||
self.assertIsFile(archive_path_old(doc))
|
self.assertIsFile(archive_path_old(doc))
|
||||||
with open(archive_path_old(doc), "rb") as f:
|
with archive_path_old(doc).open("rb") as f:
|
||||||
archive_checksum = hashlib.md5(f.read()).hexdigest()
|
archive_checksum = hashlib.md5(f.read()).hexdigest()
|
||||||
self.assertEqual(archive_checksum, doc.archive_checksum)
|
self.assertEqual(archive_checksum, doc.archive_checksum)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user