mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Enhancement: auto-link duplicate document for failed tasks (#8415)
This commit is contained in:
		| @@ -1605,13 +1605,20 @@ class TasksViewSerializer(OwnedObjectSerializer): | ||||
|         return "file" | ||||
|  | ||||
|     related_document = serializers.SerializerMethodField() | ||||
|     related_doc_re = re.compile(r"New document id (\d+) created") | ||||
|     created_doc_re = re.compile(r"New document id (\d+) created") | ||||
|     duplicate_doc_re = re.compile(r"It is a duplicate of .* \(#(\d+)\)") | ||||
|  | ||||
|     def get_related_document(self, obj): | ||||
|         result = None | ||||
|         if obj.status is not None and obj.status == states.SUCCESS: | ||||
|         re = None | ||||
|         match obj.status: | ||||
|             case states.SUCCESS: | ||||
|                 re = self.created_doc_re | ||||
|             case states.FAILURE: | ||||
|                 re = self.duplicate_doc_re | ||||
|         if re is not None: | ||||
|             try: | ||||
|                 result = self.related_doc_re.search(obj.result).group(1) | ||||
|                 result = re.search(obj.result).group(1) | ||||
|             except Exception: | ||||
|                 pass | ||||
|  | ||||
|   | ||||
| @@ -284,3 +284,28 @@ class TestTasks(DirectoriesMixin, APITestCase): | ||||
|         returned_data = response.data[0] | ||||
|  | ||||
|         self.assertEqual(returned_data["task_file_name"], "anothertest.pdf") | ||||
|  | ||||
|     def test_task_result_failed_duplicate_includes_related_doc(self): | ||||
|         """ | ||||
|         GIVEN: | ||||
|             - A celery task failed with a duplicate error | ||||
|         WHEN: | ||||
|             - API call is made to get tasks | ||||
|         THEN: | ||||
|             - The returned data includes a related document link | ||||
|         """ | ||||
|         PaperlessTask.objects.create( | ||||
|             task_id=str(uuid.uuid4()), | ||||
|             task_file_name="task_one.pdf", | ||||
|             status=celery.states.FAILURE, | ||||
|             result="Not consuming task_one.pdf: It is a duplicate of task_one_existing.pdf (#1234).", | ||||
|         ) | ||||
|  | ||||
|         response = self.client.get(self.ENDPOINT) | ||||
|  | ||||
|         self.assertEqual(response.status_code, status.HTTP_200_OK) | ||||
|         self.assertEqual(len(response.data), 1) | ||||
|  | ||||
|         returned_data = response.data[0] | ||||
|  | ||||
|         self.assertEqual(returned_data["related_document"], "1234") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shamoon
					shamoon