From 07bb9aa723275ea691abf4c13612dd6f877a08b4 Mon Sep 17 00:00:00 2001 From: Wolf-Bastian Poettner Date: Sat, 28 Mar 2020 21:04:55 +0000 Subject: [PATCH] Allow filename to use tags[KEY] and tags[INDEX] --- paperless.conf.example | 2 +- src/documents/models.py | 20 +++++--------------- src/documents/tests/test_file_handling.py | 6 +++--- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/paperless.conf.example b/paperless.conf.example index a375ae8ba..b99995b8f 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -60,7 +60,7 @@ PAPERLESS_EMAIL_SECRET="" # * {title} # * {created} # * {added} -# * {tag[KEY]} If your tags conform to key_value or key-value +# * {tags[KEY]} If your tags conform to key_value or key-value # * {tags[INDEX]} If your tags are strings, select the tag by index # Uniqueness of filenames is ensured, as an incrementing counter is attached # to each filename. diff --git a/src/documents/models.py b/src/documents/models.py index 17357c1a7..006c214fa 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -289,7 +289,10 @@ class Document(models.Model): # entries contain an _ or - which will be used as a delimiter mydictionary = dict() - for t in field.all(): + for index, t in enumerate(field.all()): + # Populate tag names by index + mydictionary[index] = slugify(t.name) + # Find delimiter delimiter = t.name.find('_') @@ -306,16 +309,6 @@ class Document(models.Model): return mydictionary - @staticmethod - def many_to_list(field): - # Converts ManyToManyField to list - mylist = list() - - for t in field.all(): - mylist.append(slugify(t.name)) - - return mylist - @staticmethod def fill_list(input_list, length, filler): while len(input_list) < length: @@ -326,16 +319,13 @@ class Document(models.Model): def generate_source_filename(self): # Create filename based on configured format if settings.PAPERLESS_FILENAME_FORMAT is not None: - tag = defaultdict(lambda: slugify(None), - self.many_to_dictionary(self.tags)) tags = defaultdict(lambda: slugify(None), - enumerate(self.many_to_list(self.tags))) + self.many_to_dictionary(self.tags)) path = settings.PAPERLESS_FILENAME_FORMAT.format( correspondent=slugify(self.correspondent), title=slugify(self.title), created=slugify(self.created), added=slugify(self.added), - tag=tag, tags=tags) else: path = "" diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index fae1c0634..7af99adfc 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -145,7 +145,7 @@ class TestDate(TestCase): @override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}". format(str(uuid4())[:8])) - @override_settings(PAPERLESS_FILENAME_FORMAT="{tag[type]}") + @override_settings(PAPERLESS_FILENAME_FORMAT="{tags[type]}") def test_tags_with_underscore(self): document = Document() document.file_type = "pdf" @@ -168,7 +168,7 @@ class TestDate(TestCase): @override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}". format(str(uuid4())[:8])) - @override_settings(PAPERLESS_FILENAME_FORMAT="{tag[type]}") + @override_settings(PAPERLESS_FILENAME_FORMAT="{tags[type]}") def test_tags_with_dash(self): document = Document() document.file_type = "pdf" @@ -191,7 +191,7 @@ class TestDate(TestCase): @override_settings(MEDIA_ROOT="/tmp/paperless-tests-{}". format(str(uuid4())[:8])) - @override_settings(PAPERLESS_FILENAME_FORMAT="{tag[type]}") + @override_settings(PAPERLESS_FILENAME_FORMAT="{tags[type]}") def test_tags_malformed(self): document = Document() document.file_type = "pdf"