From 24a2cfd95722331aba7ca1aae7be3eb0c252d1d7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 4 Mar 2026 15:57:44 -0800 Subject: [PATCH] Change: use explicit doc creation instead of clone for versions (#12226) --- src/documents/consumer.py | 37 ++++++++++++++-------------- src/documents/tests/test_consumer.py | 2 ++ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 3f1ffc9d1..b5f7ebb24 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -170,7 +170,7 @@ class ConsumerPlugin( ): logging_name = LOGGING_NAME - def _clone_root_into_version( + def _create_version_from_root( self, root_doc: Document, *, @@ -188,30 +188,29 @@ class ConsumerPlugin( )["max_index"] or 0 ) - version_doc = Document.objects.get(pk=root_doc_frozen.pk) - setattr(version_doc, "pk", None) - version_doc.root_document = root_doc_frozen - version_doc.version_index = next_version_index + 1 file_for_checksum = ( self.unmodified_original if self.unmodified_original is not None else self.working_copy ) - version_doc.checksum = hashlib.md5( - file_for_checksum.read_bytes(), - ).hexdigest() - version_doc.content = text or "" - version_doc.page_count = page_count - version_doc.mime_type = mime_type - version_doc.original_filename = self.filename - # Clear unique file path fields so they can be generated uniquely later - version_doc.filename = None - version_doc.archive_filename = None - version_doc.archive_checksum = None + version_doc = Document( + root_document=root_doc_frozen, + version_index=next_version_index + 1, + checksum=hashlib.md5( + file_for_checksum.read_bytes(), + ).hexdigest(), + content=text or "", + page_count=page_count, + mime_type=mime_type, + original_filename=self.filename, + owner_id=root_doc_frozen.owner_id, + created=root_doc_frozen.created, + title=root_doc_frozen.title, + added=timezone.now(), + modified=timezone.now(), + ) if self.metadata.version_label is not None: version_doc.version_label = self.metadata.version_label - version_doc.added = timezone.now() - version_doc.modified = timezone.now() return version_doc def run_pre_consume_script(self) -> None: @@ -537,7 +536,7 @@ class ConsumerPlugin( root_doc = Document.objects.get( pk=self.input_doc.root_document_id, ) - original_document = self._clone_root_into_version( + original_document = self._create_version_from_root( root_doc, text=text, page_count=page_count, diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 121717f08..2acfb3c7d 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -731,6 +731,7 @@ class TestConsumer( path="root/{{title}}", ) root_doc.storage_path = root_storage_path + root_doc.archive_serial_number = 42 root_doc.save() actor = User.objects.create_user( @@ -781,6 +782,7 @@ class TestConsumer( assert version.original_filename is not None self.assertEqual(version.version_index, 1) self.assertEqual(version.version_label, "v2") + self.assertIsNone(version.archive_serial_number) self.assertEqual(version.original_filename, version_file.name) self.assertTrue(bool(version.content))