diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index e3fd059dc721d2f84fd35efe4acb32c6a24b4e81..3c00f5019f071e349a32aec425fa62ede9477686 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -9,7 +9,7 @@ from django.contrib.gis.geos import LinearRing from django.core.exceptions import ValidationError as DjangoValidationError from django.core.validators import URLValidator from django.db import transaction -from drf_spectacular.utils import extend_schema_field, extend_schema_serializer +from drf_spectacular.utils import extend_schema_field from rest_framework import serializers from rest_framework.exceptions import ValidationError @@ -27,10 +27,9 @@ from arkindex.images.serializers import ZoneSerializer from arkindex.process.models import WorkerVersion from arkindex.project.fields import Array from arkindex.project.mixins import SelectionMixin -from arkindex.project.serializer_fields import ForbiddenField, LinearRingField, WorkerRunIDField +from arkindex.project.serializer_fields import LinearRingField, WorkerRunIDField from arkindex.project.tools import polygon_outside_image from arkindex.project.triggers import add_parent_selection, move_selection -from arkindex.project.validators import ForbiddenValidator from arkindex.users.models import Group, Right, Role from arkindex.users.utils import get_max_level @@ -411,7 +410,6 @@ class ElementTinySerializer(serializers.ModelSerializer): ) -@extend_schema_serializer(deprecate_fields=("worker_version_id", )) class ElementListSerializer(ElementTinySerializer): created = serializers.DateTimeField(read_only=True) classes = ClassificationSerializer( @@ -453,7 +451,6 @@ class ElementListSerializer(ElementTinySerializer): "classes", "metadata", "has_children", - "worker_version_id", "worker_run", "confidence", ) @@ -513,7 +510,6 @@ class ElementParentSerializer(serializers.Serializer): parent.remove_child(child) -@extend_schema_serializer(deprecate_fields=("worker_version", )) class ElementSerializer(ElementTinySerializer): """ Serialize an element with its metadata and classifications @@ -562,7 +558,6 @@ class ElementSerializer(ElementTinySerializer): "classifications", "image", "polygon", - "worker_version", "confidence", "worker_run", "thumbnail_put_url", @@ -573,7 +568,6 @@ class ElementSerializer(ElementTinySerializer): "rights", "metadata_count", "classifications", - "worker_version", "worker_run", "thumbnail_put_url", ) @@ -670,7 +664,6 @@ class ElementNeighborsSerializer(serializers.ModelSerializer): read_only_fields = fields -@extend_schema_serializer(deprecate_fields=("worker_version", )) class ElementCreateSerializer(ElementLightSerializer): """ Serialize an Element with a possible parent and image @@ -700,19 +693,6 @@ class ElementCreateSerializer(ElementLightSerializer): ) rotation_angle = serializers.IntegerField(min_value=0, max_value=359, required=False) mirrored = serializers.BooleanField(required=False) - worker_version = serializers.UUIDField( - required=False, - allow_null=True, - source="worker_version_id", - validators=[ - ForbiddenValidator(), - ], - help_text=dedent(""" - ID of a WorkerVersion that created this element. - - Creating new elements with a WorkerVersion is forbidden. Use `worker_run_id` instead. - """), - ) worker_run_id = WorkerRunIDField( required=False, allow_null=True, @@ -734,7 +714,6 @@ class ElementCreateSerializer(ElementLightSerializer): "polygon", "rotation_angle", "mirrored", - "worker_version", "worker_run_id", "confidence", ) @@ -899,7 +878,6 @@ class ElementBulkSerializer(serializers.Serializer): """ Serialize child elements on a common parent """ - worker_version = ForbiddenField() worker_run_id = WorkerRunIDField( help_text=dedent(""" A WorkerRun ID that the new elements will refer to. diff --git a/arkindex/documents/tests/test_bulk_elements.py b/arkindex/documents/tests/test_bulk_elements.py index 21360cb42866b9e4b77c88071e245743c98af012..bd72c968d6a5dc89b84429976ceb960ab813d959 100644 --- a/arkindex/documents/tests/test_bulk_elements.py +++ b/arkindex/documents/tests/test_bulk_elements.py @@ -385,7 +385,6 @@ class TestBulkElements(FixtureAPITestCase): response = self.client.post( reverse("api:elements-bulk-create", kwargs={"pk": str(self.element.id)}), data={ - "worker_version": str(self.worker_version.id), "elements": [ { "name": "Blah", @@ -398,8 +397,7 @@ class TestBulkElements(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { - "worker_run_id": ["This field is required."], - "worker_version": ["This field is forbidden."], + "worker_run_id": ["This field is required."] }) def test_worker_run_non_local(self): diff --git a/arkindex/documents/tests/test_children_elements.py b/arkindex/documents/tests/test_children_elements.py index 66eb2dbc47611d6e423f9a4e541d32d22a19b100..74aad75eda2535a10a209c2b06a4a04956856882 100644 --- a/arkindex/documents/tests/test_children_elements.py +++ b/arkindex/documents/tests/test_children_elements.py @@ -93,7 +93,6 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(nested_volume.id), "name": nested_volume.name, "type": nested_volume.type.slug, - "worker_version_id": None, "worker_run": None, "confidence": None, "zone": None, @@ -112,6 +111,7 @@ class TestChildrenElements(FixtureAPITestCase): } ]) + nested_volume.worker_run = self.worker_run nested_volume.worker_version = self.worker_version nested_volume.save() response = self.client.get(reverse("api:elements-children", kwargs={"pk": str(self.vol.id)}) + "?folder") @@ -120,8 +120,10 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(nested_volume.id), "name": nested_volume.name, "type": nested_volume.type.slug, - "worker_version_id": str(self.worker_version.id), - "worker_run": None, + "worker_run": { + "id": str(self.worker_run.id), + "summary": "Worker Document layout analyser @ version 1" + }, "confidence": None, "zone": None, "rotation_angle": 0, @@ -151,7 +153,6 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(lonely_element.id), "name": lonely_element.name, "type": lonely_element.type.slug, - "worker_version_id": None, "worker_run": None, "confidence": None, "zone": { @@ -201,7 +202,6 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(lonely_element.id), "name": lonely_element.name, "type": lonely_element.type.slug, - "worker_version_id": None, "worker_run": None, "confidence": None, "corpus": { @@ -231,7 +231,6 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(lonely_element.id), "name": lonely_element.name, "type": lonely_element.type.slug, - "worker_version_id": None, "worker_run": None, "confidence": None, "zone": { @@ -277,10 +276,9 @@ class TestChildrenElements(FixtureAPITestCase): "id": str(worker_run_child.id), "name": "bob", "type": "page", - "worker_version_id": str(self.worker_version.id), "worker_run": { "id": str(self.worker_run.id), - "summary": self.worker_run.summary + "summary": "Worker Document layout analyser @ version 1" }, "zone": None, "confidence": None, diff --git a/arkindex/documents/tests/test_corpus_elements.py b/arkindex/documents/tests/test_corpus_elements.py index 5d5cc86e3b13785d9bffc6674cdeaff6bcf033b7..78c3929e91a392c430441dc05166347f676d26af 100644 --- a/arkindex/documents/tests/test_corpus_elements.py +++ b/arkindex/documents/tests/test_corpus_elements.py @@ -349,8 +349,9 @@ class TestListElements(FixtureAPITestCase): ) def test_list_elements_filter_no_worker_version(self): - self.corpus.elements.update(worker_version=self.worker_version, worker_run=self.worker_run) - self.corpus.elements.filter(name__contains="Volume 2").update(worker_version=None, worker_run=None) + self.corpus.elements.update(worker_version=self.worker_version) + self.corpus.elements.update(worker_run=self.worker_run) + self.corpus.elements.filter(name__contains="Volume 2").update(worker_run=None, worker_version=None) with self.assertNumQueries(5): response = self.client.get( diff --git a/arkindex/documents/tests/test_create_elements.py b/arkindex/documents/tests/test_create_elements.py index 8fb81aed98e53bbd9e12fea1b42e3cb439e367da..d0baa1de54ce0e4684ef83cfc1745c6eda1a3752 100644 --- a/arkindex/documents/tests/test_create_elements.py +++ b/arkindex/documents/tests/test_create_elements.py @@ -94,7 +94,6 @@ class TestCreateElements(FixtureAPITestCase): "name": volume.name, "thumbnail_url": volume.thumbnail.s3_url, "thumbnail_put_url": volume.thumbnail.s3_put_url, - "worker_version": None, "confidence": None, "creator": "Test user", "rights": ["read", "write", "admin"], @@ -141,7 +140,6 @@ class TestCreateElements(FixtureAPITestCase): "created": page.created.isoformat().replace("+00:00", "Z"), "creator": "Test user", "rights": ["read", "write", "admin"], - "worker_version": None, "confidence": None, "classifications": [], "corpus": { @@ -263,7 +261,6 @@ class TestCreateElements(FixtureAPITestCase): "type": page.type.slug, "thumbnail_put_url": None, "thumbnail_url": None, - "worker_version": None, "confidence": None, "creator": "Test user", "rights": ["read", "write", "admin"], @@ -575,7 +572,7 @@ class TestCreateElements(FixtureAPITestCase): self.assertIsNone(act.creator) self.assertDictEqual(response.json()["worker_run"], { "id": str(self.local_worker_run.id), - "summary": self.local_worker_run.summary, + "summary": "Worker Custom worker @ version 1", }) def test_worker_run_task(self): @@ -603,7 +600,7 @@ class TestCreateElements(FixtureAPITestCase): self.assertIsNone(act.creator) self.assertDictEqual(response.json()["worker_run"], { "id": str(self.worker_run.id), - "summary": self.worker_run.summary, + "summary": "Worker Document layout analyser @ version 1", }) def test_worker_run_local_task_auth(self): @@ -638,7 +635,7 @@ class TestCreateElements(FixtureAPITestCase): self.assertIsNone(act.creator) self.assertDictEqual(response.json()["worker_run"], { "id": str(self.local_worker_run.id), - "summary": self.local_worker_run.summary, + "summary": "Worker Custom worker @ version 1", }) def test_worker_run_non_local(self): @@ -729,36 +726,3 @@ class TestCreateElements(FixtureAPITestCase): self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), {"worker_run_id": [f'Invalid pk "{random_uuid}" - object does not exist.']}) - - def test_worker_run_and_version(self): - self.client.force_login(self.user) - request = self.make_create_request( - name="Castle story", - elt_type="act", - worker_version=str(self.worker_version.id), - worker_run_id=str(self.local_worker_run.id), - ) - with self.assertNumQueries(5): - response = self.client.post(**request) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - self.assertDictEqual(response.json(), { - "worker_version": ["This field is forbidden."], - }) - - def test_worker_version(self): - # Create an element with a worker version - self.client.force_login(self.user) - request = self.make_create_request( - name="Castle story", - elt_type="act", - worker_version=str(self.worker_version.id), - ) - - with self.assertNumQueries(4): - response = self.client.post(**request) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - self.assertEqual(response.json(), { - "worker_version": ["This field is forbidden."], - }) diff --git a/arkindex/documents/tests/test_parents_elements.py b/arkindex/documents/tests/test_parents_elements.py index cc0a9461f3d5f2b44b06f73dc58bae1363a2cf10..b24752640ce4561f6ec5aabc724539e35a5c847a 100644 --- a/arkindex/documents/tests/test_parents_elements.py +++ b/arkindex/documents/tests/test_parents_elements.py @@ -21,6 +21,7 @@ class TestParentsElements(FixtureAPITestCase): cls.private_corpus = Corpus.objects.create(name="private", public=False) cls.private_elt = cls.private_corpus.elements.create(type=cls.private_corpus.types.create(slug="type")) cls.worker_version = WorkerVersion.objects.get(worker__slug="reco") + cls.worker_run = cls.worker_version.worker_runs.first() def test_element_parents(self): response = self.client.get(reverse("api:elements-parents", kwargs={"pk": str(self.vol.id)})) @@ -79,7 +80,6 @@ class TestParentsElements(FixtureAPITestCase): "id": str(self.vol.id), "name": self.vol.name, "type": self.vol.type.slug, - "worker_version_id": None, "worker_run": None, "confidence": None, "zone": None, @@ -97,7 +97,7 @@ class TestParentsElements(FixtureAPITestCase): """ List parents filtered by worker_version """ - self.corpus.elements.filter(name__contains="Volume 1").update(worker_version=self.worker_version) + self.corpus.elements.filter(name__contains="Volume 1").update(worker_version=self.worker_version, worker_run=self.worker_run) with self.assertNumQueries(5): response = self.client.get( @@ -649,7 +649,7 @@ class TestParentsElements(FixtureAPITestCase): self.surface.add_parent(other_act) dla = WorkerVersion.objects.get(worker__slug="dla") - act.transcriptions.create(text="blah", confidence=1, worker_version=self.worker_version) + act.transcriptions.create(text="blah", confidence=1, worker_version=self.worker_version, worker_run=self.worker_run) other_act.transcriptions.create(text="bloh", confidence=1, worker_version=dla) self.vol.transcriptions.create(text="bleh", confidence=1, worker_version=None) diff --git a/arkindex/documents/tests/test_patch_elements.py b/arkindex/documents/tests/test_patch_elements.py index 4a0bd1c6db80460c8a9535cc91d320c3e8c3676c..ce5d1f008b9a5087e51700ef4666948b2718b7d7 100644 --- a/arkindex/documents/tests/test_patch_elements.py +++ b/arkindex/documents/tests/test_patch_elements.py @@ -5,7 +5,7 @@ from rest_framework import status from arkindex.documents.models import Corpus, Element from arkindex.images.models import ImageServer -from arkindex.process.models import WorkerVersion +from arkindex.process.models import WorkerRun from arkindex.project.aws import S3FileStatus from arkindex.project.tests import FixtureAPITestCase from arkindex.users.models import Role, User @@ -125,7 +125,7 @@ class TestPatchElements(FixtureAPITestCase): "zone": 51, "metadata": [], "classifications": [], - "worker_version": str(WorkerVersion.objects.first().id), + "worker_run": str(WorkerRun.objects.first().id), }, format="json", ) @@ -133,13 +133,14 @@ class TestPatchElements(FixtureAPITestCase): data = response.json() self.assertEqual(data["name"], "New name") self.assertEqual(data["type"], "xyzzy") - self.assertIsNone(data["worker_version"]) + self.assertIsNone(data["worker_run"]) self.vol.refresh_from_db() self.assertEqual(self.vol.name, "New name") self.assertEqual(self.vol.type, box_type) self.assertNotEqual(self.vol.id, "beef") self.assertNotEqual(self.vol.corpus_id, "something") self.assertIsNone(self.vol.worker_version_id) + self.assertIsNone(self.vol.worker_run_id) def test_patch_element_polygon(self): self.client.force_login(self.user) diff --git a/arkindex/documents/tests/test_put_elements.py b/arkindex/documents/tests/test_put_elements.py index c4d42407cb0e2bac4410f7ece70b4aaadabe85a3..22cb9fce4cd5e878b4599805f3137079e947fac0 100644 --- a/arkindex/documents/tests/test_put_elements.py +++ b/arkindex/documents/tests/test_put_elements.py @@ -5,7 +5,7 @@ from rest_framework import status from arkindex.documents.models import Corpus, Element from arkindex.images.models import ImageServer -from arkindex.process.models import WorkerVersion +from arkindex.process.models import WorkerRun from arkindex.project.aws import S3FileStatus from arkindex.project.tests import FixtureAPITestCase from arkindex.users.models import Role, User @@ -120,7 +120,7 @@ class TestPutElements(FixtureAPITestCase): "zone": 51, "metadata": [], "classifications": [], - "worker_version": str(WorkerVersion.objects.first().id), + "worker_run": str(WorkerRun.objects.first().id), }, format="json", ) @@ -128,13 +128,14 @@ class TestPutElements(FixtureAPITestCase): data = response.json() self.assertEqual(data["name"], "New name") self.assertEqual(data["type"], "xyzzy") - self.assertIsNone(data["worker_version"]) + self.assertIsNone(data["worker_run"]) self.vol.refresh_from_db() self.assertEqual(self.vol.name, "New name") self.assertEqual(self.vol.type, box_type) self.assertNotEqual(self.vol.id, "beef") self.assertNotEqual(self.vol.corpus_id, "something") self.assertIsNone(self.vol.worker_version_id) + self.assertIsNone(self.vol.worker_run_id) def test_put_element_polygon(self): self.client.force_login(self.user) diff --git a/arkindex/documents/tests/test_retrieve_elements.py b/arkindex/documents/tests/test_retrieve_elements.py index ebd458883552d9ae31b18ee09120167a4113ca14..5632a510b69d8845cd1afbf6bfc3f7626476c06c 100644 --- a/arkindex/documents/tests/test_retrieve_elements.py +++ b/arkindex/documents/tests/test_retrieve_elements.py @@ -44,7 +44,6 @@ class TestRetrieveElements(FixtureAPITestCase): }, "thumbnail_url": self.vol.thumbnail.s3_url, "thumbnail_put_url": None, - "worker_version": None, "confidence": None, "zone": None, "rotation_angle": 0, @@ -61,7 +60,7 @@ class TestRetrieveElements(FixtureAPITestCase): "state": "pending", "worker_run": { "id": str(self.worker_run.id), - "summary": self.worker_run.summary + "summary": "Worker Recognizer @ version 1" }, "ml_class": { "id": str(ml_class.id), @@ -235,7 +234,6 @@ class TestRetrieveElements(FixtureAPITestCase): }, "thumbnail_url": self.vol.thumbnail.s3_url, "thumbnail_put_url": None, - "worker_version": str(self.worker_version.id), "confidence": None, "zone": None, "rotation_angle": 0, @@ -247,7 +245,7 @@ class TestRetrieveElements(FixtureAPITestCase): "classifications": [], "worker_run": { "id": str(self.worker_run.id), - "summary": self.worker_run.summary + "summary": "Worker Recognizer @ version 1" } }) @@ -270,7 +268,6 @@ class TestRetrieveElements(FixtureAPITestCase): }, "thumbnail_url": self.vol.thumbnail.s3_url, "thumbnail_put_url": None, - "worker_version": None, "confidence": None, "zone": None, "rotation_angle": 0, @@ -287,7 +284,7 @@ class TestRetrieveElements(FixtureAPITestCase): "state": "pending", "worker_run": { "id": str(self.worker_run.id), - "summary": self.worker_run.summary + "summary": "Worker Recognizer @ version 1" }, "ml_class": { "id": str(ml_class.id), diff --git a/arkindex/training/tests/test_datasets_api.py b/arkindex/training/tests/test_datasets_api.py index f06082757448935663ec0c28ba97df38f7f41c36..c2ebc9e14590439fd50899ae0e6b447b601fa441 100644 --- a/arkindex/training/tests/test_datasets_api.py +++ b/arkindex/training/tests/test_datasets_api.py @@ -1372,7 +1372,6 @@ class TestDatasetsAPI(FixtureAPITestCase): "has_children": None, "metadata": None, "worker_run": None, - "worker_version_id": None, "thumbnail_url": None, "created": FAKE_CREATED }, @@ -1421,7 +1420,6 @@ class TestDatasetsAPI(FixtureAPITestCase): "has_children": None, "metadata": None, "worker_run": None, - "worker_version_id": None, "thumbnail_url": None, "created": FAKE_CREATED }, @@ -1470,7 +1468,6 @@ class TestDatasetsAPI(FixtureAPITestCase): "has_children": None, "metadata": None, "worker_run": None, - "worker_version_id": None, "thumbnail_url": None, "created": FAKE_CREATED }, @@ -1494,7 +1491,6 @@ class TestDatasetsAPI(FixtureAPITestCase): "has_children": None, "metadata": None, "worker_run": None, - "worker_version_id": None, "thumbnail_url": "s3_url", "created": FAKE_CREATED },