mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Merge pull request #942 from paperless-ngx/bugfix-date-format
Bugfix: Fixes document filename date off by 1 issue
This commit is contained in:
		| @@ -6,6 +6,7 @@ from collections import defaultdict | ||||
| import pathvalidate | ||||
| from django.conf import settings | ||||
| from django.template.defaultfilters import slugify | ||||
| from django.utils import timezone | ||||
|  | ||||
|  | ||||
| logger = logging.getLogger("paperless.filehandling") | ||||
| @@ -158,18 +159,22 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False): | ||||
|             else: | ||||
|                 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( | ||||
|                 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=f"{doc.created.month:02}" if doc.created else "none", | ||||
|                 created_day=f"{doc.created.day:02}" if doc.created else "none", | ||||
|                 added=datetime.date.isoformat(doc.added), | ||||
|                 added_year=doc.added.year if doc.added else "none", | ||||
|                 added_month=f"{doc.added.month:02}" if doc.added else "none", | ||||
|                 added_day=f"{doc.added.day:02}" if doc.added else "none", | ||||
|                 created=datetime.date.isoformat(local_created), | ||||
|                 created_year=local_created.year, | ||||
|                 created_month=f"{local_created.month:02}", | ||||
|                 created_day=f"{local_created.day:02}", | ||||
|                 added=datetime.date.isoformat(local_added), | ||||
|                 added_year=local_added.year, | ||||
|                 added_month=f"{local_added.month:02}", | ||||
|                 added_day=f"{local_added.day:02}", | ||||
|                 asn=asn, | ||||
|                 tags=tags, | ||||
|                 tag_list=tag_list, | ||||
|   | ||||
| @@ -208,7 +208,9 @@ class Document(models.Model): | ||||
|         verbose_name_plural = _("documents") | ||||
|  | ||||
|     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: | ||||
|             return f"{created} {self.correspondent} {self.title}" | ||||
|   | ||||
| @@ -56,34 +56,62 @@ class TestDocument(TestCase): | ||||
|         doc = Document( | ||||
|             mime_type="application/pdf", | ||||
|             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") | ||||
|  | ||||
|     @override_settings( | ||||
|         TIME_ZONE="Europe/Berlin", | ||||
|     ) | ||||
|     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")) | ||||
|  | ||||
|         doc = Document( | ||||
|             mime_type="application/pdf", | ||||
|             title="test", | ||||
|             created=timezone.datetime( | ||||
|                 2020, | ||||
|                 12, | ||||
|                 25, | ||||
|                 0, | ||||
|                 0, | ||||
|                 0, | ||||
|                 0, | ||||
|                 zoneinfo.ZoneInfo("Europe/Berlin"), | ||||
|             ), | ||||
|             created=utc_create_date, | ||||
|         ) | ||||
|  | ||||
|         # Ensure the create date would cause an off by 1 if not properly created above | ||||
|         self.assertEqual(utc_create_date.date().day, 24) | ||||
|         self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf") | ||||
|  | ||||
|         local_create_date = timezone.datetime( | ||||
|             2020, | ||||
|             1, | ||||
|             1, | ||||
|             tzinfo=zoneinfo.ZoneInfo("Europe/Berlin"), | ||||
|         ) | ||||
|  | ||||
|         utc_create_date = local_create_date.astimezone(zoneinfo.ZoneInfo("UTC")) | ||||
|  | ||||
|         doc = Document( | ||||
|             mime_type="application/pdf", | ||||
|             title="test", | ||||
|             created=utc_create_date, | ||||
|         ) | ||||
|  | ||||
|         # Ensure the create date would cause an off by 1 in the year if not properly created above | ||||
|         self.assertEqual(utc_create_date.date().year, 2019) | ||||
|         self.assertEqual(doc.get_public_filename(), "2020-01-01 test.pdf") | ||||
|  | ||||
|     def test_file_name_jpg(self): | ||||
|  | ||||
|         doc = Document( | ||||
|             mime_type="image/jpeg", | ||||
|             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") | ||||
|  | ||||
| @@ -92,7 +120,7 @@ class TestDocument(TestCase): | ||||
|         doc = Document( | ||||
|             mime_type="application/zip", | ||||
|             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") | ||||
|  | ||||
| @@ -101,6 +129,6 @@ class TestDocument(TestCase): | ||||
|         doc = Document( | ||||
|             mime_type="image/jpegasd", | ||||
|             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") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shamoon
					shamoon