From a5355010b06476da37b4428d6a57a2fb7a7ca0d2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 9 Mar 2026 10:48:51 -0700 Subject: [PATCH] make it a separate one --- src/documents/apps.py | 3 ++- src/documents/consumer.py | 7 +++++ src/documents/signals/__init__.py | 1 + src/documents/signals/handlers.py | 6 ----- src/documents/tests/test_consumer.py | 21 +++++++++++++-- src/documents/tests/test_workflows.py | 39 ++------------------------- 6 files changed, 31 insertions(+), 46 deletions(-) diff --git a/src/documents/apps.py b/src/documents/apps.py index e3ea991e3..e6b406556 100644 --- a/src/documents/apps.py +++ b/src/documents/apps.py @@ -10,6 +10,7 @@ class DocumentsConfig(AppConfig): def ready(self) -> None: from documents.signals import document_consumption_finished from documents.signals import document_updated + from documents.signals import document_version_added from documents.signals.handlers import add_inbox_tags from documents.signals.handlers import add_or_update_document_in_llm_index from documents.signals.handlers import add_to_index @@ -29,7 +30,7 @@ class DocumentsConfig(AppConfig): document_consumption_finished.connect(set_storage_path) document_consumption_finished.connect(add_to_index) document_consumption_finished.connect(run_workflows_added) - document_consumption_finished.connect(run_workflows_version_added) + document_version_added.connect(run_workflows_version_added) document_consumption_finished.connect(add_or_update_document_in_llm_index) document_updated.connect(run_workflows_updated) document_updated.connect(send_websocket_document_updated) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index cbc2198ef..58d7db4c2 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -46,6 +46,7 @@ from documents.plugins.helpers import ProgressStatusOptions from documents.signals import document_consumption_finished from documents.signals import document_consumption_started from documents.signals import document_updated +from documents.signals import document_version_added from documents.signals.handlers import run_workflows from documents.templating.workflows import parse_w_workflow_placeholders from documents.utils import copy_basic_file_stats @@ -625,6 +626,12 @@ class ConsumerPlugin( if self.unmodified_original else self.working_copy, ) + if document.root_document_id: + document_version_added.send( + sender=self.__class__, + document=document, + logging_group=self.logging_group, + ) # After everything is in the database, copy the files into # place. If this fails, we'll also rollback the transaction. diff --git a/src/documents/signals/__init__.py b/src/documents/signals/__init__.py index fbb55d9fe..34e55b74f 100644 --- a/src/documents/signals/__init__.py +++ b/src/documents/signals/__init__.py @@ -2,5 +2,6 @@ from django.dispatch import Signal document_consumption_started = Signal() document_consumption_finished = Signal() +document_version_added = Signal() document_consumer_declaration = Signal() document_updated = Signal() diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 7f5f9cd35..d0d565f05 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -787,18 +787,12 @@ def run_workflows_version_added( sender, document: Document, logging_group: uuid.UUID | None = None, - original_file=None, **kwargs, ) -> None: - if document.root_document is None: - return - run_workflows( trigger_type=WorkflowTrigger.WorkflowTriggerType.VERSION_ADDED, document=document.root_document, logging_group=logging_group, - overrides=None, - original_file=original_file, ) diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 2acfb3c7d..130ba5ad4 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -715,9 +715,16 @@ class TestConsumer( self._assert_first_last_send_progress() @override_settings(AUDIT_LOG_ENABLED=True) + @mock.patch("documents.consumer.document_updated.send") + @mock.patch("documents.consumer.document_version_added.send") @mock.patch("documents.consumer.load_classifier") - def test_consume_version_creates_new_version(self, m) -> None: - m.return_value = MagicMock() + def test_consume_version_creates_new_version( + self, + mock_load_classifier: mock.Mock, + mock_document_version_added_send: mock.Mock, + mock_document_updated_send: mock.Mock, + ) -> None: + mock_load_classifier.return_value = MagicMock() with self.get_consumer(self.get_test_file()) as consumer: consumer.run() @@ -785,6 +792,16 @@ class TestConsumer( self.assertIsNone(version.archive_serial_number) self.assertEqual(version.original_filename, version_file.name) self.assertTrue(bool(version.content)) + mock_document_version_added_send.assert_called_once() + self.assertEqual( + mock_document_version_added_send.call_args.kwargs["document"].id, + version.id, + ) + mock_document_updated_send.assert_called_once() + self.assertEqual( + mock_document_updated_send.call_args.kwargs["document"].id, + root_doc.id, + ) @override_settings(AUDIT_LOG_ENABLED=True) @mock.patch("documents.consumer.load_classifier") diff --git a/src/documents/tests/test_workflows.py b/src/documents/tests/test_workflows.py index b3d2ead8c..7bc8d1020 100644 --- a/src/documents/tests/test_workflows.py +++ b/src/documents/tests/test_workflows.py @@ -60,6 +60,7 @@ from documents.models import WorkflowTrigger from documents.plugins.base import StopConsumeTaskError from documents.serialisers import WorkflowTriggerSerializer from documents.signals import document_consumption_finished +from documents.signals import document_version_added from documents.tests.utils import DirectoriesMixin from documents.tests.utils import DummyProgressManager from documents.tests.utils import FileSystemAssertsMixin @@ -1813,7 +1814,7 @@ class TestWorkflows( root_document=root_doc, ) - document_consumption_finished.send( + document_version_added.send( sender=self.__class__, document=version_doc, ) @@ -1833,42 +1834,6 @@ class TestWorkflows( 1, ) - def test_version_added_workflow_ignored_for_root_documents(self) -> None: - trigger = WorkflowTrigger.objects.create( - type=WorkflowTrigger.WorkflowTriggerType.VERSION_ADDED, - ) - action = WorkflowAction.objects.create( - assign_title="Should not run", - ) - workflow = Workflow.objects.create( - name="Version workflow", - order=0, - ) - workflow.triggers.add(trigger) - workflow.actions.add(action) - - root_doc = Document.objects.create( - title="root", - correspondent=self.c, - original_filename="root.pdf", - ) - - document_consumption_finished.send( - sender=self.__class__, - document=root_doc, - ) - - root_doc.refresh_from_db() - - self.assertEqual(root_doc.title, "root") - self.assertFalse( - WorkflowRun.objects.filter( - workflow=workflow, - type=WorkflowTrigger.WorkflowTriggerType.VERSION_ADDED, - document=root_doc, - ).exists(), - ) - def test_document_updated_workflow(self) -> None: trigger = WorkflowTrigger.objects.create( type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED,