diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index 68180448c..ce51afe81 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -1,3 +1,4 @@ +import logging import os from collections import defaultdict @@ -66,24 +67,27 @@ def many_to_dictionary(field): def generate_filename(document): # Create filename based on configured format - if settings.PAPERLESS_FILENAME_FORMAT is not None: - tags = defaultdict(lambda: slugify(None), - many_to_dictionary(document.tags)) - path = settings.PAPERLESS_FILENAME_FORMAT.format( - correspondent=slugify(document.correspondent), - title=slugify(document.title), - created=slugify(document.created), - created_year=document.created.year if document.created else "none", - created_month=document.created.month if document.created else "none", - created_day=document.created.day if document.created else "none", - added=slugify(document.added), - added_year=document.added.year if document.added else "none", - added_month=document.added.month if document.added else "none", - added_day=document.added.day if document.added else "none", - tags=tags, - ) - else: - path = "" + path = "" + + try: + if settings.PAPERLESS_FILENAME_FORMAT is not None: + tags = defaultdict(lambda: slugify(None), + many_to_dictionary(document.tags)) + path = settings.PAPERLESS_FILENAME_FORMAT.format( + correspondent=slugify(document.correspondent), + title=slugify(document.title), + created=slugify(document.created), + created_year=document.created.year if document.created else "none", + created_month=document.created.month if document.created else "none", + created_day=document.created.day if document.created else "none", + added=slugify(document.added), + added_year=document.added.year if document.added else "none", + added_month=document.added.month if document.added else "none", + added_day=document.added.day if document.added else "none", + tags=tags, + ) + except (ValueError, KeyError, IndexError) as e: + logging.getLogger(__name__).warning("Invalid PAPERLESS_FILENAME_FORMAT: {}, falling back to default,".format(settings.PAPERLESS_FILENAME_FORMAT)) # Always append the primary key to guarantee uniqueness of filename if len(path) > 0: diff --git a/src/documents/signals/__init__.py b/src/documents/signals/__init__.py index 810f14f49..393630008 100644 --- a/src/documents/signals/__init__.py +++ b/src/documents/signals/__init__.py @@ -1,5 +1,5 @@ from django.dispatch import Signal -document_consumption_started = Signal(providing_args=["filename"]) -document_consumption_finished = Signal(providing_args=["document"]) -document_consumer_declaration = Signal(providing_args=[]) +document_consumption_started = Signal() +document_consumption_finished = Signal() +document_consumer_declaration = Signal() diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index 4aced80cb..d44e5056a 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -330,3 +330,21 @@ def test_try_delete_empty_directories(self): os.path.join(tmp, "notempty", "file")), True) self.assertEqual(os.path.isdir( os.path.join(tmp, "notempty", "empty")), False) + + @override_settings(PAPERLESS_FILENAME_FORMAT="{created/[title]") + def test_invalid_format(self): + document = Document() + document.pk = 1 + document.file_type = "pdf" + document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED + + self.assertEqual(generate_filename(document), "0000001.pdf") + + @override_settings(PAPERLESS_FILENAME_FORMAT="{created__year}") + def test_invalid_format_key(self): + document = Document() + document.pk = 1 + document.file_type = "pdf" + document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED + + self.assertEqual(generate_filename(document), "0000001.pdf")