From 1a5988ccfb615422c7d885314d2e781c0be10a1d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 3 Apr 2025 23:23:44 -0700 Subject: [PATCH] And some more --- src/documents/filters.py | 13 +++++ .../migrations/1066_alter_document_created.py | 4 +- src/documents/models.py | 2 +- src/documents/serialisers.py | 2 +- src/documents/tests/test_api_objects.py | 5 +- src/documents/tests/test_api_search.py | 2 +- src/documents/tests/test_bulk_edit.py | 11 +++- src/documents/tests/test_consumer.py | 9 ++- src/documents/tests/test_document_model.py | 56 ++----------------- src/documents/tests/test_file_handling.py | 32 +++++------ 10 files changed, 54 insertions(+), 82 deletions(-) diff --git a/src/documents/filters.py b/src/documents/filters.py index f8b0799c7..cf51aa8e9 100644 --- a/src/documents/filters.py +++ b/src/documents/filters.py @@ -740,6 +740,19 @@ class DocumentFilterSet(FilterSet): mime_type = MimeTypeFilter() + # Backwards compatibility + created__date__gt = Filter( + field_name="created", + label="Created after", + lookup_expr="gt", + ) + + created__date__lt = Filter( + field_name="created", + label="Created before", + lookup_expr="lt", + ) + class Meta: model = Document fields = { diff --git a/src/documents/migrations/1066_alter_document_created.py b/src/documents/migrations/1066_alter_document_created.py index 28725cf76..f35366d9a 100644 --- a/src/documents/migrations/1066_alter_document_created.py +++ b/src/documents/migrations/1066_alter_document_created.py @@ -1,7 +1,7 @@ # Generated by Django 5.1.7 on 2025-04-04 01:08 -import datetime +import django from django.db import migrations from django.db import models @@ -17,7 +17,7 @@ class Migration(migrations.Migration): name="created", field=models.DateField( db_index=True, - default=datetime.date(2025, 4, 4), + default=django.utils.timezone.now, verbose_name="created", ), ), diff --git a/src/documents/models.py b/src/documents/models.py index a4fc10028..b5040a668 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -214,7 +214,7 @@ class Document(SoftDeleteModel, ModelWithOwner): created = models.DateField( _("created"), - default=timezone.now().date(), + default=timezone.now, db_index=True, ) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 1d0899ae2..3505f13fb 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -422,7 +422,7 @@ class OwnedObjectListSerializer(serializers.ListSerializer): class CorrespondentSerializer(MatchingModelSerializer, OwnedObjectSerializer): - last_correspondence = serializers.DateTimeField(read_only=True, required=False) + last_correspondence = serializers.DateField(read_only=True, required=False) class Meta: model = Correspondent diff --git a/src/documents/tests/test_api_objects.py b/src/documents/tests/test_api_objects.py index d4d3c729e..bba9031db 100644 --- a/src/documents/tests/test_api_objects.py +++ b/src/documents/tests/test_api_objects.py @@ -4,7 +4,6 @@ from unittest import mock from django.contrib.auth.models import Permission from django.contrib.auth.models import User -from django.utils import timezone from rest_framework import status from rest_framework.test import APITestCase @@ -104,13 +103,13 @@ class TestApiObjects(DirectoriesMixin, APITestCase): Document.objects.create( mime_type="application/pdf", correspondent=self.c1, - created=timezone.make_aware(datetime.datetime(2022, 1, 1)), + created=datetime.date(2022, 1, 1), checksum="123", ) Document.objects.create( mime_type="application/pdf", correspondent=self.c1, - created=timezone.make_aware(datetime.datetime(2022, 1, 2)), + created=datetime.date(2022, 1, 2), checksum="456", ) diff --git a/src/documents/tests/test_api_search.py b/src/documents/tests/test_api_search.py index 118862979..7ffce06de 100644 --- a/src/documents/tests/test_api_search.py +++ b/src/documents/tests/test_api_search.py @@ -721,7 +721,7 @@ class TestDocumentSearchApi(DirectoriesMixin, APITestCase): d3.tags.add(t2) d4 = Document.objects.create( checksum="4", - created=timezone.make_aware(datetime.datetime(2020, 7, 13)), + created=datetime.date(2020, 7, 13), content="test", original_filename="doc4.pdf", ) diff --git a/src/documents/tests/test_bulk_edit.py b/src/documents/tests/test_bulk_edit.py index dd59a6217..1b8bc5bf2 100644 --- a/src/documents/tests/test_bulk_edit.py +++ b/src/documents/tests/test_bulk_edit.py @@ -1,4 +1,5 @@ import shutil +from datetime import date from pathlib import Path from unittest import mock @@ -39,18 +40,24 @@ class TestBulkEdit(DirectoriesMixin, TestCase): self.dt2 = DocumentType.objects.create(name="dt2") self.t1 = Tag.objects.create(name="t1") self.t2 = Tag.objects.create(name="t2") - self.doc1 = Document.objects.create(checksum="A", title="A") + self.doc1 = Document.objects.create( + checksum="A", + title="A", + created=date(2023, 1, 1), + ) self.doc2 = Document.objects.create( checksum="B", title="B", correspondent=self.c1, document_type=self.dt1, + created=date(2023, 1, 2), ) self.doc3 = Document.objects.create( checksum="C", title="C", correspondent=self.c2, document_type=self.dt2, + created=date(2023, 1, 3), ) self.doc4 = Document.objects.create(checksum="D", title="D") self.doc5 = Document.objects.create(checksum="E", title="E") @@ -500,6 +507,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): filename=sample2, mime_type="application/pdf", page_count=8, + created=date(2023, 1, 2), ) self.doc2.archive_filename = sample2_archive self.doc2.save() @@ -528,6 +536,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): title="D", filename=img_doc, mime_type="image/jpeg", + created=date(2023, 1, 3), ) self.img_doc.archive_filename = img_doc_archive self.img_doc.save() diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 54ea77db3..370ff0ef6 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -7,7 +7,6 @@ from pathlib import Path from unittest import mock from unittest.mock import MagicMock -from dateutil import tz from django.conf import settings from django.contrib.auth.models import Group from django.contrib.auth.models import User @@ -919,7 +918,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase): self.assertEqual( document.created, - datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), + datetime.date(1996, 2, 20), ) @override_settings(FILENAME_DATE_ORDER="YMD") @@ -949,7 +948,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase): self.assertEqual( document.created, - datetime.datetime(2022, 2, 1, tzinfo=tz.gettz(settings.TIME_ZONE)), + datetime.date(2022, 2, 1), ) def test_consume_date_filename_date_use_content(self): @@ -979,7 +978,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase): self.assertEqual( document.created, - datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), + datetime.date(1996, 2, 20), ) @override_settings( @@ -1011,7 +1010,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase): self.assertEqual( document.created, - datetime.datetime(1997, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), + datetime.date(1997, 2, 20), ) diff --git a/src/documents/tests/test_document_model.py b/src/documents/tests/test_document_model.py index eca08f82a..45c8441f6 100644 --- a/src/documents/tests/test_document_model.py +++ b/src/documents/tests/test_document_model.py @@ -1,12 +1,11 @@ import shutil import tempfile -import zoneinfo +from datetime import date from pathlib import Path from unittest import mock from django.test import TestCase from django.test import override_settings -from django.utils import timezone from documents.models import Correspondent from documents.models import Document @@ -81,60 +80,15 @@ class TestDocument(TestCase): doc = Document( mime_type="application/pdf", title="test", - created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")), + created=date(2020, 12, 25), ) 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=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, tzinfo=zoneinfo.ZoneInfo("UTC")), + created=date(2020, 12, 25), ) self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg") @@ -142,7 +96,7 @@ class TestDocument(TestCase): doc = Document( mime_type="application/zip", title="test", - created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")), + created=date(2020, 12, 25), ) self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip") @@ -150,6 +104,6 @@ class TestDocument(TestCase): doc = Document( mime_type="image/jpegasd", title="test", - created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")), + created=date(2020, 12, 25), ) self.assertEqual(doc.get_public_filename(), "2020-12-25 test") diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index aad4945ed..fe033a267 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -912,7 +912,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): def test_date(self): doc = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 5, 21, 7, 36, 51, 153)), + created=datetime.date(2020, 5, 21), mime_type="application/pdf", pk=2, checksum="2", @@ -930,7 +930,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), mime_type="application/pdf", pk=2, checksum="2", @@ -951,7 +951,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), mime_type="application/pdf", pk=2, checksum="2", @@ -979,7 +979,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): ) doc = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), mime_type="application/pdf", pk=2, checksum="2", @@ -1007,7 +1007,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), mime_type="application/pdf", pk=2, checksum="2", @@ -1019,7 +1019,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): ) doc_b = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 7, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 7, 25), mime_type="application/pdf", pk=5, checksum="abcde", @@ -1047,7 +1047,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), mime_type="application/pdf", pk=2, checksum="2", @@ -1055,7 +1055,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): ) doc_b = Document.objects.create( title="does not matter", - created=timezone.make_aware(datetime.datetime(2020, 7, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 7, 25), mime_type="application/pdf", pk=5, checksum="abcde", @@ -1074,9 +1074,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): def test_short_names_created(self): doc = Document.objects.create( title="The Title", - created=timezone.make_aware( - datetime.datetime(1989, 12, 21, 7, 36, 51, 153), - ), + created=datetime.date(1989, 12, 2), mime_type="application/pdf", pk=2, checksum="2", @@ -1236,7 +1234,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): doc_a = Document.objects.create( title="Does Matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2, @@ -1302,7 +1300,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="Does Matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2, @@ -1337,7 +1335,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="Does Matter", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2, @@ -1369,7 +1367,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="Some Title", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2, @@ -1474,7 +1472,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc_a = Document.objects.create( title="Some Title", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2, @@ -1529,7 +1527,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase): """ doc = Document.objects.create( title="Some Title! With @ Special # Characters", - created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)), + created=datetime.date(2020, 6, 25), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)), mime_type="application/pdf", pk=2,