]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: accept datetime for created (#10021)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Sat, 24 May 2025 17:14:15 +0000 (10:14 -0700)
committerGitHub <noreply@github.com>
Sat, 24 May 2025 17:14:15 +0000 (17:14 +0000)
src/documents/serialisers.py
src/documents/tests/test_api_documents.py

index 9782932bcfbe612277b12fa8799b815dc860457b..3b9b2062a283984e7ea8e282a495b0652aa58625 100644 (file)
@@ -965,6 +965,20 @@ class DocumentSerializer(
             ).isoformat()
         return doc
 
+    def to_internal_value(self, data):
+        if (
+            "created" in data
+            and isinstance(data["created"], str)
+            and ":" in data["created"]
+        ):
+            # Handle old format of isoformat datetime string
+            try:
+                data["created"] = datetime.fromisoformat(data["created"]).date()
+            except ValueError:  # pragma: no cover
+                # Just pass, validation will catch it
+                pass
+        return super().to_internal_value(data)
+
     def validate(self, attrs):
         if (
             "archive_serial_number" in attrs
index bb77f581825d05c68dc2190fd9239d7776bcab1c..dd4236718350dbdecc99389fa1cba257620bac47 100644 (file)
@@ -203,6 +203,34 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         self.assertEqual(response.data["created"], "2023-01-01")
 
+    def test_document_update_legacy_created_format(self):
+        """
+        GIVEN:
+            - Existing document
+        WHEN:
+            - Document is updated with created in datetime format
+        THEN:
+            - Document created field is updated as date
+        """
+        doc = Document.objects.create(
+            title="none",
+            checksum="123",
+            mime_type="application/pdf",
+            created=date(2023, 1, 1),
+        )
+
+        created_datetime = datetime.datetime(2023, 2, 1, 12, 0, 0)
+        response = self.client.patch(
+            f"/api/documents/{doc.pk}/",
+            {"created": created_datetime},
+            format="json",
+        )
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
+        doc.refresh_from_db()
+        self.assertEqual(doc.created, date(2023, 2, 1))
+
     def test_document_update_with_created_date(self):
         """
         GIVEN: