]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Performance: make move files after select custom field change async (#11391)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Wed, 19 Nov 2025 15:21:33 +0000 (07:21 -0800)
committerGitHub <noreply@github.com>
Wed, 19 Nov 2025 15:21:33 +0000 (15:21 +0000)
src/documents/signals/handlers.py
src/documents/tests/test_api_custom_fields.py
src/documents/tests/test_file_handling.py

index bce376f7697106c20c1572aa9ac02eb4a0889a9d..0e53c93576cb881085d67d52a20a7866520d2418 100644 (file)
@@ -396,6 +396,7 @@ class CannotMoveFilesException(Exception):
 @receiver(models.signals.post_save, sender=CustomFieldInstance, weak=False)
 @receiver(models.signals.m2m_changed, sender=Document.tags.through, weak=False)
 @receiver(models.signals.post_save, sender=Document, weak=False)
+@shared_task
 def update_filename_and_move_files(
     sender,
     instance: Document | CustomFieldInstance,
@@ -559,7 +560,7 @@ def check_paths_and_prune_custom_fields(sender, instance: CustomField, **kwargs)
                 cf_instance.save(update_fields=["value_select"])
 
             # Update the filename and move files if necessary
-            update_filename_and_move_files(sender, cf_instance)
+            update_filename_and_move_files.delay(sender, cf_instance)
 
 
 @receiver(models.signals.post_delete, sender=CustomField)
index 31dd14b882e96b6490f1d111be8fe95d9aeb7b80..b6e6c134238c7a07da7097f8f8c1fce4102b82bf 100644 (file)
@@ -4,6 +4,7 @@ from unittest.mock import ANY
 
 from django.contrib.auth.models import Permission
 from django.contrib.auth.models import User
+from django.test import override_settings
 from rest_framework import status
 from rest_framework.test import APITestCase
 
@@ -211,6 +212,7 @@ class TestCustomFieldsAPI(DirectoriesMixin, APITestCase):
             ],
         )
 
+    @override_settings(CELERY_TASK_ALWAYS_EAGER=True)
     def test_custom_field_select_options_pruned(self):
         """
         GIVEN:
index c0070aa81d9e078094125987b6cdd57ac8486c38..117a964baa072f6ea7315687fd26defdfb7974eb 100644 (file)
@@ -569,7 +569,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
         self.assertEqual(generate_filename(doc), Path("document_apple.pdf"))
 
         # handler should not have been called
-        self.assertEqual(m.call_count, 0)
+        self.assertEqual(m.delay.call_count, 0)
         cf.extra_data = {
             "select_options": [
                 {"label": "aubergine", "id": "abc123"},
@@ -579,8 +579,8 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
         }
         cf.save()
         self.assertEqual(generate_filename(doc), Path("document_aubergine.pdf"))
-        # handler should have been called
-        self.assertEqual(m.call_count, 1)
+        # handler should have been called via delay
+        self.assertEqual(m.delay.call_count, 1)
 
 
 class TestFileHandlingWithArchive(DirectoriesMixin, FileSystemAssertsMixin, TestCase):