Refactored source_filename_new into generate_source_filename and

create_source_directory
This commit is contained in:
Wolf-Bastian Poettner 2020-02-01 13:52:27 +00:00
parent e79f5394fc
commit bcff75433c
2 changed files with 28 additions and 16 deletions

View File

@ -279,7 +279,7 @@ class Document(models.Model):
@property @property
def source_filename(self): def source_filename(self):
if self.filename is None: if self.filename is None:
self.filename = self.source_filename_new() self.filename = self.generate_source_filename()
return self.filename return self.filename
@ -298,7 +298,7 @@ class Document(models.Model):
return mydictionary return mydictionary
def source_filename_new(self): def generate_source_filename(self):
# Create directory name based on configured format # Create directory name based on configured format
if settings.PAPERLESS_DIRECTORY_FORMAT is not None: if settings.PAPERLESS_DIRECTORY_FORMAT is not None:
directory = settings.PAPERLESS_DIRECTORY_FORMAT.format( directory = settings.PAPERLESS_DIRECTORY_FORMAT.format(
@ -335,12 +335,17 @@ class Document(models.Model):
if self.storage_type == self.STORAGE_TYPE_GPG: if self.storage_type == self.STORAGE_TYPE_GPG:
filename += ".gpg" filename += ".gpg"
# Create directory for target (and ignore, if directory exists already)
create_dir = self.filename_to_path(slugify(directory))
os.makedirs(create_dir, exist_ok=True)
return filename return filename
def create_source_directory(self):
new_filename = self.generate_source_filename()
# Determine the full "target" path
dir_new = self.filename_to_path(os.path.dirname(new_filename))
# Create new path
os.makedirs(dir_new, exist_ok=True)
@property @property
def source_path(self): def source_path(self):
return self.filename_to_path(self.source_filename) return self.filename_to_path(self.source_filename)
@ -408,7 +413,7 @@ def update_filename(sender, instance, **kwargs):
return return
# Build the new filename # Build the new filename
new_filename = instance.source_filename_new() new_filename = instance.generate_source_filename()
# If the filename is the same, then nothing needs to be done # If the filename is the same, then nothing needs to be done
if instance.filename is None or \ if instance.filename is None or \
@ -421,6 +426,9 @@ def update_filename(sender, instance, **kwargs):
path_new = instance.filename_to_path(new_filename) path_new = instance.filename_to_path(new_filename)
dir_new = instance.filename_to_path(os.path.dirname(new_filename)) dir_new = instance.filename_to_path(os.path.dirname(new_filename))
# Create new path
instance.create_source_directory()
# Determine the full "current" path # Determine the full "current" path
path_current = instance.filename_to_path(instance.filename) path_current = instance.filename_to_path(instance.filename)

View File

@ -29,16 +29,17 @@ class TestDate(TestCase):
@override_settings(PAPERLESS_DIRECTORY_FORMAT="") @override_settings(PAPERLESS_DIRECTORY_FORMAT="")
@override_settings(PAPERLESS_FILENAME_FORMAT="") @override_settings(PAPERLESS_FILENAME_FORMAT="")
def test_source_filename_new(self): def test_generate_source_filename(self):
document = Document() document = Document()
document.file_type = "pdf" document.file_type = "pdf"
document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED
document.save() document.save()
self.assertEqual(document.source_filename_new(), "0000001.pdf") self.assertEqual(document.generate_source_filename(), "0000001.pdf")
document.storage_type = Document.STORAGE_TYPE_GPG document.storage_type = Document.STORAGE_TYPE_GPG
self.assertEqual(document.source_filename_new(), "0000001.pdf.gpg") self.assertEqual(document.generate_source_filename(),
"0000001.pdf.gpg")
@override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}". @override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}".
format(str(uuid4())[:8])) format(str(uuid4())[:8]))
@ -52,8 +53,9 @@ class TestDate(TestCase):
# Ensure that filename is properly generated # Ensure that filename is properly generated
tmp = document.source_filename tmp = document.source_filename
self.assertEqual(document.source_filename_new(), self.assertEqual(document.generate_source_filename(),
"none/none-0000001.pdf") "none/none-0000001.pdf")
document.create_source_directory()
Path(document.source_path).touch() Path(document.source_path).touch()
# Test source_path # Test source_path
@ -63,7 +65,7 @@ class TestDate(TestCase):
# Enable encryption and check again # Enable encryption and check again
document.storage_type = Document.STORAGE_TYPE_GPG document.storage_type = Document.STORAGE_TYPE_GPG
tmp = document.source_filename tmp = document.source_filename
self.assertEqual(document.source_filename_new(), self.assertEqual(document.generate_source_filename(),
"none/none-0000001.pdf.gpg") "none/none-0000001.pdf.gpg")
document.save() document.save()
@ -82,7 +84,7 @@ class TestDate(TestCase):
"/documents/originals/none"), False) "/documents/originals/none"), False)
self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + "/documents/" + self.assertEqual(os.path.isfile(settings.MEDIA_ROOT + "/documents/" +
"originals/test/test-0000001.pdf.gpg"), True) "originals/test/test-0000001.pdf.gpg"), True)
self.assertEqual(document.source_filename_new(), self.assertEqual(document.generate_source_filename(),
"test/test-0000001.pdf.gpg") "test/test-0000001.pdf.gpg")
@override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}". @override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}".
@ -97,8 +99,9 @@ class TestDate(TestCase):
# Ensure that filename is properly generated # Ensure that filename is properly generated
tmp = document.source_filename tmp = document.source_filename
self.assertEqual(document.source_filename_new(), self.assertEqual(document.generate_source_filename(),
"none/none-0000001.pdf") "none/none-0000001.pdf")
document.create_source_directory()
Path(document.source_path).touch() Path(document.source_path).touch()
# Ensure file deletion after delete # Ensure file deletion after delete
@ -120,8 +123,9 @@ class TestDate(TestCase):
# Ensure that filename is properly generated # Ensure that filename is properly generated
tmp = document.source_filename tmp = document.source_filename
self.assertEqual(document.source_filename_new(), self.assertEqual(document.generate_source_filename(),
"none/none-0000001.pdf") "none/none-0000001.pdf")
document.create_source_directory()
Path(document.source_path).touch() Path(document.source_path).touch()
Path(document.source_path + "test").touch() Path(document.source_path + "test").touch()
@ -151,4 +155,4 @@ class TestDate(TestCase):
document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED
document.save() document.save()
self.assertEqual(document.source_filename_new(), "0000001.pdf") self.assertEqual(document.generate_source_filename(), "0000001.pdf")