mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	changes to filename generation, partially addresses #90
This commit is contained in:
		| @@ -1,11 +1,14 @@ | ||||
| import datetime | ||||
| import logging | ||||
| import os | ||||
| from collections import defaultdict | ||||
|  | ||||
| import pathvalidate | ||||
| from django.conf import settings | ||||
| from django.template.defaultfilters import slugify | ||||
|  | ||||
|  | ||||
|  | ||||
| def create_source_path_directory(source_path): | ||||
|     os.makedirs(os.path.dirname(source_path), exist_ok=True) | ||||
|  | ||||
| @@ -75,14 +78,31 @@ def generate_filename(doc): | ||||
|         if settings.PAPERLESS_FILENAME_FORMAT is not None: | ||||
|             tags = defaultdict(lambda: slugify(None), | ||||
|                                many_to_dictionary(doc.tags)) | ||||
|  | ||||
|             if doc.correspondent: | ||||
|                 correspondent = pathvalidate.sanitize_filename( | ||||
|                     doc.correspondent.name, replacement_text="-" | ||||
|                 ) | ||||
|             else: | ||||
|                 correspondent = "none" | ||||
|  | ||||
|             if doc.document_type: | ||||
|                 document_type = pathvalidate.sanitize_filename( | ||||
|                     doc.document_type.name, replacement_text="-" | ||||
|                 ) | ||||
|             else: | ||||
|                 document_type = "none" | ||||
|  | ||||
|             path = settings.PAPERLESS_FILENAME_FORMAT.format( | ||||
|                 correspondent=slugify(doc.correspondent), | ||||
|                 title=slugify(doc.title), | ||||
|                 created=slugify(doc.created), | ||||
|                 title=pathvalidate.sanitize_filename( | ||||
|                     doc.title, replacement_text="-"), | ||||
|                 correspondent=correspondent, | ||||
|                 document_type=document_type, | ||||
|                 created=datetime.date.isoformat(doc.created), | ||||
|                 created_year=doc.created.year if doc.created else "none", | ||||
|                 created_month=doc.created.month if doc.created else "none", | ||||
|                 created_day=doc.created.day if doc.created else "none", | ||||
|                 added=slugify(doc.added), | ||||
|                 added=datetime.date.isoformat(doc.added), | ||||
|                 added_year=doc.added.year if doc.added else "none", | ||||
|                 added_month=doc.added.month if doc.added else "none", | ||||
|                 added_day=doc.added.day if doc.added else "none", | ||||
|   | ||||
| @@ -598,7 +598,7 @@ class TestConsumer(DirectoriesMixin, TestCase): | ||||
|  | ||||
|         self.assertEqual(document.title, "new docs") | ||||
|         self.assertEqual(document.correspondent.name, "Bank") | ||||
|         self.assertEqual(document.filename, "bank/new-docs-0000001.pdf") | ||||
|         self.assertEqual(document.filename, "Bank/new docs-0000001.pdf") | ||||
|  | ||||
|     @override_settings(PAPERLESS_FILENAME_FORMAT="{correspondent}/{title}") | ||||
|     @mock.patch("documents.signals.handlers.generate_filename") | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import datetime | ||||
| import os | ||||
| import shutil | ||||
| from pathlib import Path | ||||
| from unittest import mock | ||||
|  | ||||
| @@ -485,3 +485,23 @@ class TestFileHandlingWithArchive(DirectoriesMixin, TestCase): | ||||
|         self.assertTrue(os.path.isfile(archive)) | ||||
|         self.assertTrue(os.path.isfile(doc.source_path)) | ||||
|         self.assertTrue(os.path.isfile(doc.archive_path)) | ||||
|  | ||||
| class TestFilenameGeneration(TestCase): | ||||
|  | ||||
|     @override_settings( | ||||
|         PAPERLESS_FILENAME_FORMAT="{title}" | ||||
|     ) | ||||
|     def test_invalid_characters(self): | ||||
|  | ||||
|         doc = Document.objects.create(title="This. is the title.", mime_type="application/pdf", pk=1, checksum="1") | ||||
|         self.assertEqual(generate_filename(doc), "This. is the title-0000001.pdf") | ||||
|  | ||||
|         doc = Document.objects.create(title="my\\invalid/../title:yay", mime_type="application/pdf", pk=2, checksum="2") | ||||
|         self.assertEqual(generate_filename(doc), "my-invalid-..-title-yay-0000002.pdf") | ||||
|  | ||||
|     @override_settings( | ||||
|         PAPERLESS_FILENAME_FORMAT="{created}" | ||||
|     ) | ||||
|     def test_date(self): | ||||
|         doc = Document.objects.create(title="does not matter", created=datetime.datetime(2020,5,21, 7,36,51, 153), mime_type="application/pdf", pk=2, checksum="2") | ||||
|         self.assertEqual(generate_filename(doc), "2020-05-21-0000002.pdf") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jonaswinkler
					jonaswinkler