mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	add exception handler for invalid filename formats.
This commit is contained in:
		| @@ -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: | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -330,3 +330,21 @@ class TestDate(TestCase): | ||||
|             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") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonas Winkler
					Jonas Winkler