mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05:00 
			
		
		
		
	Fixes Document public filename so it will use the local date instead of UTC date
This commit is contained in:
		
							parent
							
								
									38f4bf4e28
								
							
						
					
					
						commit
						f3dced3199
					
				@ -6,6 +6,7 @@ from collections import defaultdict
 | 
				
			|||||||
import pathvalidate
 | 
					import pathvalidate
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
from django.template.defaultfilters import slugify
 | 
					from django.template.defaultfilters import slugify
 | 
				
			||||||
 | 
					from django.utils import timezone
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger = logging.getLogger("paperless.filehandling")
 | 
					logger = logging.getLogger("paperless.filehandling")
 | 
				
			||||||
@ -158,18 +159,22 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False):
 | 
				
			|||||||
            else:
 | 
					            else:
 | 
				
			||||||
                asn = "none"
 | 
					                asn = "none"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # Convert UTC database date to localized date
 | 
				
			||||||
 | 
					            local_added = timezone.localdate(doc.added)
 | 
				
			||||||
 | 
					            local_created = timezone.localdate(doc.created)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            path = settings.PAPERLESS_FILENAME_FORMAT.format(
 | 
					            path = settings.PAPERLESS_FILENAME_FORMAT.format(
 | 
				
			||||||
                title=pathvalidate.sanitize_filename(doc.title, replacement_text="-"),
 | 
					                title=pathvalidate.sanitize_filename(doc.title, replacement_text="-"),
 | 
				
			||||||
                correspondent=correspondent,
 | 
					                correspondent=correspondent,
 | 
				
			||||||
                document_type=document_type,
 | 
					                document_type=document_type,
 | 
				
			||||||
                created=datetime.date.isoformat(doc.created),
 | 
					                created=datetime.date.isoformat(local_created),
 | 
				
			||||||
                created_year=doc.created.year if doc.created else "none",
 | 
					                created_year=local_created.year,
 | 
				
			||||||
                created_month=f"{doc.created.month:02}" if doc.created else "none",
 | 
					                created_month=f"{local_created.month:02}",
 | 
				
			||||||
                created_day=f"{doc.created.day:02}" if doc.created else "none",
 | 
					                created_day=f"{local_created.day:02}",
 | 
				
			||||||
                added=datetime.date.isoformat(doc.added),
 | 
					                added=datetime.date.isoformat(local_added),
 | 
				
			||||||
                added_year=doc.added.year if doc.added else "none",
 | 
					                added_year=local_added.year,
 | 
				
			||||||
                added_month=f"{doc.added.month:02}" if doc.added else "none",
 | 
					                added_month=f"{local_added.month:02}",
 | 
				
			||||||
                added_day=f"{doc.added.day:02}" if doc.added else "none",
 | 
					                added_day=f"{local_added.day:02}",
 | 
				
			||||||
                asn=asn,
 | 
					                asn=asn,
 | 
				
			||||||
                tags=tags,
 | 
					                tags=tags,
 | 
				
			||||||
                tag_list=tag_list,
 | 
					                tag_list=tag_list,
 | 
				
			||||||
 | 
				
			|||||||
@ -208,7 +208,9 @@ class Document(models.Model):
 | 
				
			|||||||
        verbose_name_plural = _("documents")
 | 
					        verbose_name_plural = _("documents")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        created = datetime.date.isoformat(self.created)
 | 
					
 | 
				
			||||||
 | 
					        # Convert UTC database time to local time
 | 
				
			||||||
 | 
					        created = datetime.date.isoformat(timezone.localdate(self.created))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if self.correspondent and self.title:
 | 
					        if self.correspondent and self.title:
 | 
				
			||||||
            return f"{created} {self.correspondent} {self.title}"
 | 
					            return f"{created} {self.correspondent} {self.title}"
 | 
				
			||||||
 | 
				
			|||||||
@ -56,26 +56,35 @@ class TestDocument(TestCase):
 | 
				
			|||||||
        doc = Document(
 | 
					        doc = Document(
 | 
				
			||||||
            mime_type="application/pdf",
 | 
					            mime_type="application/pdf",
 | 
				
			||||||
            title="test",
 | 
					            title="test",
 | 
				
			||||||
            created=timezone.datetime(2020, 12, 25),
 | 
					            created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
 | 
					        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @override_settings(
 | 
				
			||||||
 | 
					        TIME_ZONE="Europe/Berlin",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    def test_file_name_with_timezone(self):
 | 
					    def test_file_name_with_timezone(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # See https://docs.djangoproject.com/en/4.0/ref/utils/#django.utils.timezone.now
 | 
				
			||||||
 | 
					        # The default for created is an aware datetime in UTC
 | 
				
			||||||
 | 
					        # This does that, just manually, with a fixed date
 | 
				
			||||||
 | 
					        local_create_date = timezone.datetime(
 | 
				
			||||||
 | 
					            2020,
 | 
				
			||||||
 | 
					            12,
 | 
				
			||||||
 | 
					            25,
 | 
				
			||||||
 | 
					            tzinfo=zoneinfo.ZoneInfo("Europe/Berlin"),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        utc_create_date = local_create_date.astimezone(zoneinfo.ZoneInfo("UTC"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(utc_create_date.date().day, 24)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        doc = Document(
 | 
					        doc = Document(
 | 
				
			||||||
            mime_type="application/pdf",
 | 
					            mime_type="application/pdf",
 | 
				
			||||||
            title="test",
 | 
					            title="test",
 | 
				
			||||||
            created=timezone.datetime(
 | 
					            created=utc_create_date,
 | 
				
			||||||
                2020,
 | 
					 | 
				
			||||||
                12,
 | 
					 | 
				
			||||||
                25,
 | 
					 | 
				
			||||||
                0,
 | 
					 | 
				
			||||||
                0,
 | 
					 | 
				
			||||||
                0,
 | 
					 | 
				
			||||||
                0,
 | 
					 | 
				
			||||||
                zoneinfo.ZoneInfo("Europe/Berlin"),
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
 | 
					        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_file_name_jpg(self):
 | 
					    def test_file_name_jpg(self):
 | 
				
			||||||
@ -83,7 +92,7 @@ class TestDocument(TestCase):
 | 
				
			|||||||
        doc = Document(
 | 
					        doc = Document(
 | 
				
			||||||
            mime_type="image/jpeg",
 | 
					            mime_type="image/jpeg",
 | 
				
			||||||
            title="test",
 | 
					            title="test",
 | 
				
			||||||
            created=timezone.datetime(2020, 12, 25),
 | 
					            created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg")
 | 
					        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -92,7 +101,7 @@ class TestDocument(TestCase):
 | 
				
			|||||||
        doc = Document(
 | 
					        doc = Document(
 | 
				
			||||||
            mime_type="application/zip",
 | 
					            mime_type="application/zip",
 | 
				
			||||||
            title="test",
 | 
					            title="test",
 | 
				
			||||||
            created=timezone.datetime(2020, 12, 25),
 | 
					            created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip")
 | 
					        self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -101,6 +110,6 @@ class TestDocument(TestCase):
 | 
				
			|||||||
        doc = Document(
 | 
					        doc = Document(
 | 
				
			||||||
            mime_type="image/jpegasd",
 | 
					            mime_type="image/jpegasd",
 | 
				
			||||||
            title="test",
 | 
					            title="test",
 | 
				
			||||||
            created=timezone.datetime(2020, 12, 25),
 | 
					            created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.assertEqual(doc.get_public_filename(), "2020-12-25 test")
 | 
					        self.assertEqual(doc.get_public_filename(), "2020-12-25 test")
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user