datetime filter

This commit is contained in:
shamoon 2024-10-04 19:51:53 -07:00
parent 6cba3fd439
commit 5aa493dbda
2 changed files with 66 additions and 0 deletions

View File

@ -2,10 +2,12 @@ import logging
import os import os
import re import re
from collections.abc import Iterable from collections.abc import Iterable
from datetime import datetime
from pathlib import PurePath from pathlib import PurePath
import pathvalidate import pathvalidate
from django.utils import timezone from django.utils import timezone
from django.utils.dateparse import parse_date
from jinja2 import StrictUndefined from jinja2 import StrictUndefined
from jinja2 import Template from jinja2 import Template
from jinja2 import TemplateSyntaxError from jinja2 import TemplateSyntaxError
@ -90,6 +92,15 @@ def get_cf_value(
_template_environment.filters["get_cf_value"] = get_cf_value _template_environment.filters["get_cf_value"] = get_cf_value
def format_datetime(value: str | datetime, format: str) -> str:
if isinstance(value, str):
value = parse_date(value)
return value.strftime(format=format)
_template_environment.filters["datetime"] = format_datetime
def create_dummy_document(): def create_dummy_document():
""" """
Create a dummy Document instance with all possible fields filled Create a dummy Document instance with all possible fields filled

View File

@ -1382,3 +1382,58 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
generate_filename(doc_a), generate_filename(doc_a),
"invoices/0.pdf", "invoices/0.pdf",
) )
def test_datetime_filter(self):
"""
GIVEN:
- Filename format with datetime filter
WHEN:
- Filepath for a document with this format is called
THEN:
- The datetime filter is rendered
"""
doc_a = Document.objects.create(
title="Some Title",
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf",
pk=2,
checksum="2",
archive_serial_number=25,
)
CustomField.objects.create(
name="Invoice Date",
data_type=CustomField.FieldDataType.DATE,
)
CustomFieldInstance.objects.create(
document=doc_a,
field=CustomField.objects.get(name="Invoice Date"),
value_date=timezone.make_aware(
datetime.datetime(2024, 10, 1, 7, 36, 51, 153),
),
)
with override_settings(
FILENAME_FORMAT="{{ created | datetime('%Y') }}/{{ title }}",
):
self.assertEqual(
generate_filename(doc_a),
"2020/Some Title.pdf",
)
with override_settings(
FILENAME_FORMAT="{{ created | datetime('%Y-%m-%d') }}/{{ title }}",
):
self.assertEqual(
generate_filename(doc_a),
"2020-06-25/Some Title.pdf",
)
with override_settings(
FILENAME_FORMAT="{{ custom_fields | get_cf_value('Invoice Date') | datetime('%Y-%m-%d') }}/{{ title }}",
):
self.assertEqual(
generate_filename(doc_a),
"2024-10-01/Some Title.pdf",
)