add exception handler for invalid filename formats.

This commit is contained in:
Jonas Winkler 2020-11-13 20:31:51 +01:00
parent 4862ce7674
commit 82168e1a51
3 changed files with 43 additions and 21 deletions

View File

@ -1,3 +1,4 @@
import logging
import os import os
from collections import defaultdict from collections import defaultdict
@ -66,24 +67,27 @@ def many_to_dictionary(field):
def generate_filename(document): def generate_filename(document):
# Create filename based on configured format # Create filename based on configured format
if settings.PAPERLESS_FILENAME_FORMAT is not None: path = ""
tags = defaultdict(lambda: slugify(None),
many_to_dictionary(document.tags)) try:
path = settings.PAPERLESS_FILENAME_FORMAT.format( if settings.PAPERLESS_FILENAME_FORMAT is not None:
correspondent=slugify(document.correspondent), tags = defaultdict(lambda: slugify(None),
title=slugify(document.title), many_to_dictionary(document.tags))
created=slugify(document.created), path = settings.PAPERLESS_FILENAME_FORMAT.format(
created_year=document.created.year if document.created else "none", correspondent=slugify(document.correspondent),
created_month=document.created.month if document.created else "none", title=slugify(document.title),
created_day=document.created.day if document.created else "none", created=slugify(document.created),
added=slugify(document.added), created_year=document.created.year if document.created else "none",
added_year=document.added.year if document.added else "none", created_month=document.created.month if document.created else "none",
added_month=document.added.month if document.added else "none", created_day=document.created.day if document.created else "none",
added_day=document.added.day if document.added else "none", added=slugify(document.added),
tags=tags, added_year=document.added.year if document.added else "none",
) added_month=document.added.month if document.added else "none",
else: added_day=document.added.day if document.added else "none",
path = "" 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 # Always append the primary key to guarantee uniqueness of filename
if len(path) > 0: if len(path) > 0:

View File

@ -1,5 +1,5 @@
from django.dispatch import Signal from django.dispatch import Signal
document_consumption_started = Signal(providing_args=["filename"]) document_consumption_started = Signal()
document_consumption_finished = Signal(providing_args=["document"]) document_consumption_finished = Signal()
document_consumer_declaration = Signal(providing_args=[]) document_consumer_declaration = Signal()

View File

@ -330,3 +330,21 @@ class TestDate(TestCase):
os.path.join(tmp, "notempty", "file")), True) os.path.join(tmp, "notempty", "file")), True)
self.assertEqual(os.path.isdir( self.assertEqual(os.path.isdir(
os.path.join(tmp, "notempty", "empty")), False) 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")