From 2d6606b0b13c78c9d2ef4fe08c0a3be661c042b1 Mon Sep 17 00:00:00 2001 From: mlbonhomme <bonhomme@teklia.com> Date: Tue, 10 Sep 2024 16:32:56 +0200 Subject: [PATCH] Replace default Element not found message with ElementRetrieve --- arkindex/documents/api/elements.py | 7 ++++++- arkindex/documents/tests/test_retrieve_elements.py | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 4d6f2a4481..6a5d8fea87 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -21,6 +21,7 @@ from django.db.models import ( prefetch_related_objects, ) from django.db.models.functions import Cast +from django.http import Http404 from django.shortcuts import get_object_or_404 from django.utils.functional import cached_property from drf_spectacular.types import OpenApiTypes @@ -1291,7 +1292,11 @@ class ElementRetrieve(ACLMixin, RetrieveUpdateDestroyAPIView): def get_object(self): # Prevent duplicating database request if not hasattr(self, "element"): - self.element = super().get_object() + try: + self.element = super().get_object() + except Http404: + # Replacing the default "No Element matches the given query" message + raise Http404(f"Element {self.kwargs['pk']} not found.") return self.element def get_queryset(self): diff --git a/arkindex/documents/tests/test_retrieve_elements.py b/arkindex/documents/tests/test_retrieve_elements.py index 5632a510b6..4a7226a344 100644 --- a/arkindex/documents/tests/test_retrieve_elements.py +++ b/arkindex/documents/tests/test_retrieve_elements.py @@ -25,6 +25,12 @@ class TestRetrieveElements(FixtureAPITestCase): super().setUp() self.page = self.corpus.elements.get(name="Volume 1, page 1r") + def test_get_element_does_not_exist(self): + with self.assertNumQueries(1): + response = self.client.get(reverse("api:element-retrieve", kwargs={"pk": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"})) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + self.assertEqual(response.json(), {"detail": "Element aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa not found."}) + def test_get_element(self): ml_class = MLClass.objects.create(name="text", corpus=self.corpus) classification = self.vol.classifications.create(worker_version=self.worker_version, worker_run=self.worker_run, ml_class=ml_class, confidence=0.8) -- GitLab