And some more

This commit is contained in:
shamoon 2025-04-03 23:23:44 -07:00
parent 630d9e090a
commit 1a5988ccfb
No known key found for this signature in database
10 changed files with 54 additions and 82 deletions

View File

@ -740,6 +740,19 @@ class DocumentFilterSet(FilterSet):
mime_type = MimeTypeFilter() 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: class Meta:
model = Document model = Document
fields = { fields = {

View File

@ -1,7 +1,7 @@
# Generated by Django 5.1.7 on 2025-04-04 01:08 # 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 migrations
from django.db import models from django.db import models
@ -17,7 +17,7 @@ class Migration(migrations.Migration):
name="created", name="created",
field=models.DateField( field=models.DateField(
db_index=True, db_index=True,
default=datetime.date(2025, 4, 4), default=django.utils.timezone.now,
verbose_name="created", verbose_name="created",
), ),
), ),

View File

@ -214,7 +214,7 @@ class Document(SoftDeleteModel, ModelWithOwner):
created = models.DateField( created = models.DateField(
_("created"), _("created"),
default=timezone.now().date(), default=timezone.now,
db_index=True, db_index=True,
) )

View File

@ -422,7 +422,7 @@ class OwnedObjectListSerializer(serializers.ListSerializer):
class CorrespondentSerializer(MatchingModelSerializer, OwnedObjectSerializer): class CorrespondentSerializer(MatchingModelSerializer, OwnedObjectSerializer):
last_correspondence = serializers.DateTimeField(read_only=True, required=False) last_correspondence = serializers.DateField(read_only=True, required=False)
class Meta: class Meta:
model = Correspondent model = Correspondent

View File

@ -4,7 +4,6 @@ from unittest import mock
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils import timezone
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
@ -104,13 +103,13 @@ class TestApiObjects(DirectoriesMixin, APITestCase):
Document.objects.create( Document.objects.create(
mime_type="application/pdf", mime_type="application/pdf",
correspondent=self.c1, correspondent=self.c1,
created=timezone.make_aware(datetime.datetime(2022, 1, 1)), created=datetime.date(2022, 1, 1),
checksum="123", checksum="123",
) )
Document.objects.create( Document.objects.create(
mime_type="application/pdf", mime_type="application/pdf",
correspondent=self.c1, correspondent=self.c1,
created=timezone.make_aware(datetime.datetime(2022, 1, 2)), created=datetime.date(2022, 1, 2),
checksum="456", checksum="456",
) )

View File

@ -721,7 +721,7 @@ class TestDocumentSearchApi(DirectoriesMixin, APITestCase):
d3.tags.add(t2) d3.tags.add(t2)
d4 = Document.objects.create( d4 = Document.objects.create(
checksum="4", checksum="4",
created=timezone.make_aware(datetime.datetime(2020, 7, 13)), created=datetime.date(2020, 7, 13),
content="test", content="test",
original_filename="doc4.pdf", original_filename="doc4.pdf",
) )

View File

@ -1,4 +1,5 @@
import shutil import shutil
from datetime import date
from pathlib import Path from pathlib import Path
from unittest import mock from unittest import mock
@ -39,18 +40,24 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
self.dt2 = DocumentType.objects.create(name="dt2") self.dt2 = DocumentType.objects.create(name="dt2")
self.t1 = Tag.objects.create(name="t1") self.t1 = Tag.objects.create(name="t1")
self.t2 = Tag.objects.create(name="t2") 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( self.doc2 = Document.objects.create(
checksum="B", checksum="B",
title="B", title="B",
correspondent=self.c1, correspondent=self.c1,
document_type=self.dt1, document_type=self.dt1,
created=date(2023, 1, 2),
) )
self.doc3 = Document.objects.create( self.doc3 = Document.objects.create(
checksum="C", checksum="C",
title="C", title="C",
correspondent=self.c2, correspondent=self.c2,
document_type=self.dt2, document_type=self.dt2,
created=date(2023, 1, 3),
) )
self.doc4 = Document.objects.create(checksum="D", title="D") self.doc4 = Document.objects.create(checksum="D", title="D")
self.doc5 = Document.objects.create(checksum="E", title="E") self.doc5 = Document.objects.create(checksum="E", title="E")
@ -500,6 +507,7 @@ class TestPDFActions(DirectoriesMixin, TestCase):
filename=sample2, filename=sample2,
mime_type="application/pdf", mime_type="application/pdf",
page_count=8, page_count=8,
created=date(2023, 1, 2),
) )
self.doc2.archive_filename = sample2_archive self.doc2.archive_filename = sample2_archive
self.doc2.save() self.doc2.save()
@ -528,6 +536,7 @@ class TestPDFActions(DirectoriesMixin, TestCase):
title="D", title="D",
filename=img_doc, filename=img_doc,
mime_type="image/jpeg", mime_type="image/jpeg",
created=date(2023, 1, 3),
) )
self.img_doc.archive_filename = img_doc_archive self.img_doc.archive_filename = img_doc_archive
self.img_doc.save() self.img_doc.save()

View File

@ -7,7 +7,6 @@ from pathlib import Path
from unittest import mock from unittest import mock
from unittest.mock import MagicMock from unittest.mock import MagicMock
from dateutil import tz
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.models import User from django.contrib.auth.models import User
@ -919,7 +918,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
self.assertEqual( self.assertEqual(
document.created, document.created,
datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), datetime.date(1996, 2, 20),
) )
@override_settings(FILENAME_DATE_ORDER="YMD") @override_settings(FILENAME_DATE_ORDER="YMD")
@ -949,7 +948,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
self.assertEqual( self.assertEqual(
document.created, 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): def test_consume_date_filename_date_use_content(self):
@ -979,7 +978,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
self.assertEqual( self.assertEqual(
document.created, document.created,
datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), datetime.date(1996, 2, 20),
) )
@override_settings( @override_settings(
@ -1011,7 +1010,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
self.assertEqual( self.assertEqual(
document.created, document.created,
datetime.datetime(1997, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)), datetime.date(1997, 2, 20),
) )

View File

@ -1,12 +1,11 @@
import shutil import shutil
import tempfile import tempfile
import zoneinfo from datetime import date
from pathlib import Path from pathlib import Path
from unittest import mock from unittest import mock
from django.test import TestCase from django.test import TestCase
from django.test import override_settings from django.test import override_settings
from django.utils import timezone
from documents.models import Correspondent from documents.models import Correspondent
from documents.models import Document from documents.models import Document
@ -81,60 +80,15 @@ 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, tzinfo=zoneinfo.ZoneInfo("UTC")), created=date(2020, 12, 25),
) )
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):
# 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): def test_file_name_jpg(self):
doc = Document( doc = Document(
mime_type="image/jpeg", mime_type="image/jpeg",
title="test", 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") self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg")
@ -142,7 +96,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, tzinfo=zoneinfo.ZoneInfo("UTC")), created=date(2020, 12, 25),
) )
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip") self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip")
@ -150,6 +104,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, tzinfo=zoneinfo.ZoneInfo("UTC")), created=date(2020, 12, 25),
) )
self.assertEqual(doc.get_public_filename(), "2020-12-25 test") self.assertEqual(doc.get_public_filename(), "2020-12-25 test")

View File

@ -912,7 +912,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
def test_date(self): def test_date(self):
doc = Document.objects.create( doc = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -930,7 +930,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc = Document.objects.create( doc = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -951,7 +951,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc = Document.objects.create( doc = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -979,7 +979,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
) )
doc = Document.objects.create( doc = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -1007,7 +1007,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -1019,7 +1019,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
) )
doc_b = Document.objects.create( doc_b = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=5, pk=5,
checksum="abcde", checksum="abcde",
@ -1047,7 +1047,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -1055,7 +1055,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
) )
doc_b = Document.objects.create( doc_b = Document.objects.create(
title="does not matter", 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", mime_type="application/pdf",
pk=5, pk=5,
checksum="abcde", checksum="abcde",
@ -1074,9 +1074,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
def test_short_names_created(self): def test_short_names_created(self):
doc = Document.objects.create( doc = Document.objects.create(
title="The Title", title="The Title",
created=timezone.make_aware( created=datetime.date(1989, 12, 2),
datetime.datetime(1989, 12, 21, 7, 36, 51, 153),
),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
checksum="2", checksum="2",
@ -1236,7 +1234,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="Does Matter", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
@ -1302,7 +1300,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="Does Matter", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
@ -1337,7 +1335,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="Does Matter", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
@ -1369,7 +1367,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="Some Title", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
@ -1474,7 +1472,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc_a = Document.objects.create( doc_a = Document.objects.create(
title="Some Title", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,
@ -1529,7 +1527,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
""" """
doc = Document.objects.create( doc = Document.objects.create(
title="Some Title! With @ Special # Characters", 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)), added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
mime_type="application/pdf", mime_type="application/pdf",
pk=2, pk=2,