From 1920af583bca423ff37fdcb5079f2aeb93840fe6 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Tue, 6 Aug 2024 14:46:28 +0200 Subject: [PATCH] Replace classes with classifications in element lists --- arkindex/documents/api/elements.py | 8 ++++++-- arkindex/documents/serializers/elements.py | 5 +++-- arkindex/documents/tests/test_children_elements.py | 12 ++++++------ arkindex/documents/tests/test_classes.py | 8 ++++---- arkindex/documents/tests/test_parents_elements.py | 2 +- arkindex/training/tests/test_datasets_api.py | 8 ++++---- 6 files changed, 24 insertions(+), 19 deletions(-) diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 754c780007..831f54678d 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -465,7 +465,7 @@ class ElementsListAutoSchema(AutoSchema): OpenApiParameter( "with_classes", description="Returns all classifications for each element. " - "Otherwise, `classes` will always be null.", + "Otherwise, `classifications` will always be null.", type=bool, required=False, ), @@ -922,7 +922,11 @@ class ElementsListBase(CorpusACLMixin, DestroyModelMixin, ListAPIView): with_classes = self.clean_params.get("with_classes") if with_classes and with_classes.lower() not in ("false", "0"): - prefetch.add(Prefetch("classifications", queryset=classifications_queryset, to_attr="classes")) + prefetch.add(Prefetch( + "classifications", + queryset=classifications_queryset, + to_attr="prefetched_classifications", + )) with_metadata = self.clean_params.get("with_metadata") if with_metadata and with_metadata.lower() not in ("false", "0"): diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index 578b57de9a..e8c014777a 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -418,11 +418,12 @@ class ElementTinySerializer(serializers.ModelSerializer): class ElementListSerializer(ElementTinySerializer): created = serializers.DateTimeField(read_only=True) - classes = ClassificationSerializer( + classifications = ClassificationSerializer( many=True, default=None, read_only=True, help_text="Classifications on this element, if the `with_classes` option has been enabled.", + source="prefetched_classifications", ) metadata = MetaDataLightSerializer( many=True, @@ -463,7 +464,7 @@ class ElementListSerializer(ElementTinySerializer): model = Element fields = ElementTinySerializer.Meta.fields + ( "created", - "classes", + "classifications", "metadata", "transcriptions", "has_children", diff --git a/arkindex/documents/tests/test_children_elements.py b/arkindex/documents/tests/test_children_elements.py index c127584ea8..9515f9b9a3 100644 --- a/arkindex/documents/tests/test_children_elements.py +++ b/arkindex/documents/tests/test_children_elements.py @@ -104,7 +104,7 @@ class TestChildrenElements(FixtureAPITestCase): "name": self.corpus.name, "public": self.corpus.public, }, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -135,7 +135,7 @@ class TestChildrenElements(FixtureAPITestCase): "name": self.corpus.name, "public": self.corpus.public, }, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -185,7 +185,7 @@ class TestChildrenElements(FixtureAPITestCase): "name": self.corpus.name, "public": self.corpus.public, }, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -215,7 +215,7 @@ class TestChildrenElements(FixtureAPITestCase): "rotation_angle": 0, "mirrored": False, "created": lonely_element.created.isoformat().replace("+00:00", "Z"), - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -260,7 +260,7 @@ class TestChildrenElements(FixtureAPITestCase): "rotation_angle": 0, "mirrored": False, "created": lonely_element.created.isoformat().replace("+00:00", "Z"), - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -295,7 +295,7 @@ class TestChildrenElements(FixtureAPITestCase): "rotation_angle": 0, "mirrored": False, "created": worker_run_child.created.isoformat().replace("+00:00", "Z"), - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, diff --git a/arkindex/documents/tests/test_classes.py b/arkindex/documents/tests/test_classes.py index b0fd1b3f29..a91094f0c9 100644 --- a/arkindex/documents/tests/test_classes.py +++ b/arkindex/documents/tests/test_classes.py @@ -331,7 +331,7 @@ class TestClasses(FixtureAPITestCase): self.assertEqual(data["count"], 12) for elt in data["results"]: self.assertCountEqual( - list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classes"])), + list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classifications"])), [ ({"id": str(self.worker_run_1.id), "summary": self.worker_run_1.summary}, "cover", .99), ({"id": str(self.worker_run_2.id), "summary": self.worker_run_2.summary}, "cover", .99), @@ -351,7 +351,7 @@ class TestClasses(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) for elt in response.json()["results"]: - self.assertIsNone(elt["classes"]) + self.assertIsNone(elt["classifications"]) def test_element_parents_classes(self): with self.assertNumQueries(6): @@ -364,7 +364,7 @@ class TestClasses(FixtureAPITestCase): self.assertEqual(data["count"], 12) for elt in data["results"]: self.assertCountEqual( - list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classes"])), + list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classifications"])), [ ({"id": str(self.worker_run_1.id), "summary": self.worker_run_1.summary}, "cover", .99), ({"id": str(self.worker_run_2.id), "summary": self.worker_run_2.summary}, "cover", .99), @@ -384,7 +384,7 @@ class TestClasses(FixtureAPITestCase): self.assertEqual(data["count"], 12) for elt in data["results"]: self.assertCountEqual( - list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classes"])), + list(map(lambda c: (c["worker_run"], c["ml_class"]["name"], c["confidence"]), elt["classifications"])), [ ({"id": str(self.worker_run_1.id), "summary": self.worker_run_1.summary}, "cover", .99), ({"id": str(self.worker_run_2.id), "summary": self.worker_run_2.summary}, "cover", .99), diff --git a/arkindex/documents/tests/test_parents_elements.py b/arkindex/documents/tests/test_parents_elements.py index 829eaf9868..08af037a84 100644 --- a/arkindex/documents/tests/test_parents_elements.py +++ b/arkindex/documents/tests/test_parents_elements.py @@ -84,7 +84,7 @@ class TestParentsElements(FixtureAPITestCase): "confidence": None, "zone": None, "created": "2020-02-02T01:23:45.678000Z", - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, diff --git a/arkindex/training/tests/test_datasets_api.py b/arkindex/training/tests/test_datasets_api.py index 0113b00ca0..366166fa9b 100644 --- a/arkindex/training/tests/test_datasets_api.py +++ b/arkindex/training/tests/test_datasets_api.py @@ -1368,7 +1368,7 @@ class TestDatasetsAPI(FixtureAPITestCase): "url": "http://server/img1/0,0,1000,1000/full/0/default.jpg" }, "rotation_angle": 0, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -1417,7 +1417,7 @@ class TestDatasetsAPI(FixtureAPITestCase): "url": "http://server/img2/0,0,1000,1000/full/0/default.jpg" }, "rotation_angle": 0, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -1466,7 +1466,7 @@ class TestDatasetsAPI(FixtureAPITestCase): "url": "http://server/img3/0,0,1000,1000/full/0/default.jpg" }, "rotation_angle": 42, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, @@ -1490,7 +1490,7 @@ class TestDatasetsAPI(FixtureAPITestCase): }, "zone": None, "rotation_angle": 0, - "classes": None, + "classifications": None, "has_children": None, "metadata": None, "transcriptions": None, -- GitLab