From 10b8f70490b51ed7e6b94edc6c092370a4365905 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Tue, 10 Sep 2024 12:01:21 +0000 Subject: [PATCH] Add WorkerVersion.branch --- arkindex/documents/fixtures/data.json | 7 ++ arkindex/process/admin.py | 15 ++- .../migrations/0043_workerversion_branch.py | 32 ++++++ arkindex/process/models.py | 16 ++- arkindex/process/serializers/workers.py | 17 ++- .../process/tests/test_corpus_worker_runs.py | 2 + .../process/tests/test_user_workerruns.py | 4 + arkindex/process/tests/test_workers.py | 104 +++++++++++++++--- .../process/tests/worker_runs/test_create.py | 35 +++--- .../process/tests/worker_runs/test_list.py | 1 + .../tests/worker_runs/test_partial_update.py | 7 ++ .../tests/worker_runs/test_retrieve.py | 5 + .../process/tests/worker_runs/test_update.py | 6 + arkindex/sql_validation/indexer_prefetch.sql | 2 + 14 files changed, 217 insertions(+), 36 deletions(-) create mode 100644 arkindex/process/migrations/0043_workerversion_branch.py diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json index 5d7bba2fdb..1ac57919f4 100644 --- a/arkindex/documents/fixtures/data.json +++ b/arkindex/documents/fixtures/data.json @@ -249,6 +249,7 @@ "docker_image_iid": "registry.somewhere.com/something:latest", "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -271,6 +272,7 @@ "docker_image_iid": "registry.gitlab.teklia.com/arkindex/workers/init-elements:latest", "revision_url": null, "tag": null, + "branch": null, "feature": "init_elements", "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -291,6 +293,7 @@ "docker_image_iid": null, "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -309,6 +312,7 @@ "docker_image_iid": "registry.somewhere.com/something:latest", "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -329,6 +333,7 @@ "docker_image_iid": "registry.somewhere.com/something:latest", "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -349,6 +354,7 @@ "docker_image_iid": "registry.somewhere.com/something:latest", "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" @@ -369,6 +375,7 @@ "docker_image_iid": "registry.somewhere.com/something:latest", "revision_url": null, "tag": null, + "branch": null, "feature": null, "created": "2020-02-02T01:23:45.678Z", "updated": "2020-02-02T01:23:45.678Z" diff --git a/arkindex/process/admin.py b/arkindex/process/admin.py index 7d427806eb..3dd8a2875d 100644 --- a/arkindex/process/admin.py +++ b/arkindex/process/admin.py @@ -103,7 +103,20 @@ class WorkerTypeAdmin(admin.ModelAdmin): class WorkerVersionAdmin(admin.ModelAdmin): list_display = ("id", "worker", "version", "feature") list_filter = ("worker", "feature") - fields = ("id", "worker", "version", "configuration", "model_usage", "gpu_usage", "docker_image_iid", "state", "feature") + fields = ( + "id", + "worker", + "version", + "revision_url", + "tag", + "branch", + "configuration", + "model_usage", + "gpu_usage", + "docker_image_iid", + "state", + "feature", + ) readonly_fields = ("id", ) def save_model(self, request, obj, form, change): diff --git a/arkindex/process/migrations/0043_workerversion_branch.py b/arkindex/process/migrations/0043_workerversion_branch.py new file mode 100644 index 0000000000..613c020390 --- /dev/null +++ b/arkindex/process/migrations/0043_workerversion_branch.py @@ -0,0 +1,32 @@ +# Generated by Django 5.0.8 on 2024-09-09 14:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("documents", "0012_alter_transcriptionentity_id"), + ("process", "0042_workerversion_feature"), + ] + + operations = [ + migrations.AddField( + model_name="workerversion", + name="branch", + field=models.CharField(blank=True, default=None, max_length=512, null=True), + ), + migrations.AlterField( + model_name="workerversion", + name="tag", + field=models.CharField(blank=True, default=None, max_length=512, null=True), + ), + migrations.AddConstraint( + model_name="workerversion", + constraint=models.UniqueConstraint( + condition=models.Q(branch__isnull=False), + fields=("worker", "branch"), + name="workerversion_unique_branch", + ), + ), + ] diff --git a/arkindex/process/models.py b/arkindex/process/models.py index b0e0d243f4..8c618e980f 100644 --- a/arkindex/process/models.py +++ b/arkindex/process/models.py @@ -685,7 +685,8 @@ class WorkerVersion(models.Model): # URL of the commit for this version, when worker is based on a repository revision_url = models.URLField(null=True, blank=True, max_length=250, default=None) - tag = models.CharField(blank=True, null=True, max_length=50, default=None) + branch = models.CharField(blank=True, null=True, max_length=512, default=None) + tag = models.CharField(blank=True, null=True, max_length=512, default=None) feature = EnumField( ArkindexFeature, @@ -736,6 +737,11 @@ class WorkerVersion(models.Model): name="workerversion_unique_tag", condition=Q(tag__isnull=False), ), + models.UniqueConstraint( + fields=["worker", "branch"], + name="workerversion_unique_branch", + condition=Q(branch__isnull=False), + ), models.UniqueConstraint( fields=["feature"], name="workerversion_unique_feature", @@ -955,8 +961,12 @@ class WorkerRun(models.Model): """ summary_text = f"Worker {self.version.worker.name} @ " - if self.version.tag is not None: - summary_text += f"{self.version.tag} " + if self.version.tag is not None or self.version.branch is not None: + if self.version.tag is not None: + summary_text += f"{self.version.tag} " + else: + summary_text += f"{self.version.branch} " + if self.version.revision_url is not None: summary_text += f"({self.version.truncated_id})" else: diff --git a/arkindex/process/serializers/workers.py b/arkindex/process/serializers/workers.py index f795d6e64f..bbafa5ca72 100644 --- a/arkindex/process/serializers/workers.py +++ b/arkindex/process/serializers/workers.py @@ -244,7 +244,9 @@ class WorkerVersionSerializer(serializers.ModelSerializer): model_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled) # Ensure worker version configuration JSON body is an object configuration = serializers.DictField() - tag = serializers.CharField(allow_null=True, max_length=50, required=False) + + tag = serializers.CharField(allow_null=True, max_length=512, required=False) + branch = serializers.CharField(allow_null=True, max_length=512, required=False) # Serialize worker with its basic information class Meta: @@ -261,6 +263,7 @@ class WorkerVersionSerializer(serializers.ModelSerializer): "worker", "created", "tag", + "branch", ) read_only_fields = ("revision_url", "version") @@ -303,6 +306,12 @@ class WorkerVersionSerializer(serializers.ModelSerializer): return data + def update(self, instance, validated_data): + # If a branch is being set on this WorkerVersion, remove it from any version of the same worker + if validated_data.get("branch"): + WorkerVersion.objects.filter(worker_id=instance.worker_id, branch=validated_data["branch"]).update(branch=None) + return super().update(instance, validated_data) + class WorkerVersionCreateSerializer(WorkerVersionSerializer): revision_url = serializers.URLField( @@ -349,6 +358,12 @@ class WorkerVersionCreateSerializer(WorkerVersionSerializer): data["worker_id"] = worker.id return data + def create(self, validated_data): + # If a branch is being set on this WorkerVersion, remove it from any version of the same worker + if validated_data.get("branch"): + WorkerVersion.objects.filter(worker_id=validated_data["worker_id"], branch=validated_data["branch"]).update(branch=None) + return super().create(validated_data) + class WorkerActivitySerializer(serializers.ModelSerializer): """ diff --git a/arkindex/process/tests/test_corpus_worker_runs.py b/arkindex/process/tests/test_corpus_worker_runs.py index ba263817c2..3e7cadf540 100644 --- a/arkindex/process/tests/test_corpus_worker_runs.py +++ b/arkindex/process/tests/test_corpus_worker_runs.py @@ -129,6 +129,7 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): "state": "created", "version": 1, "tag": None, + "branch": None, "worker": { "id": str(self.local_worker_version.worker.id), "name": "Custom worker", @@ -152,6 +153,7 @@ class TestCorpusWorkerRuns(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.dla_worker_version.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/process/tests/test_user_workerruns.py b/arkindex/process/tests/test_user_workerruns.py index 2806fbca12..fa2956ae7c 100644 --- a/arkindex/process/tests/test_user_workerruns.py +++ b/arkindex/process/tests/test_user_workerruns.py @@ -101,6 +101,7 @@ class TestUserWorkerRuns(FixtureAPITestCase): "state": "available", "version": 1, "tag": None, + "branch": None, "worker": { "id": str(self.version_1.worker.id), "name": "Recognizer", @@ -141,6 +142,7 @@ class TestUserWorkerRuns(FixtureAPITestCase): "state": "created", "version": 1, "tag": None, + "branch": None, "worker": { "id": str(self.custom_version.worker.id), "name": "Custom worker", @@ -226,6 +228,7 @@ class TestUserWorkerRuns(FixtureAPITestCase): "state": "created", "version": 2, "tag": None, + "branch": None, "worker": { "id": str(self.other_version.worker.id), "name": "Custom worker", @@ -439,6 +442,7 @@ class TestUserWorkerRuns(FixtureAPITestCase): "state": "created", "version": 2, "tag": None, + "branch": None, "worker": { "id": str(self.other_version.worker.id), "name": "Custom worker", diff --git a/arkindex/process/tests/test_workers.py b/arkindex/process/tests/test_workers.py index 43f5734d3e..5da77eb349 100644 --- a/arkindex/process/tests/test_workers.py +++ b/arkindex/process/tests/test_workers.py @@ -1114,6 +1114,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): }, "version": None, "tag": None, + "branch": None, "revision_url": "https://gitlab.com/NERV/eva/commit/63e377e7f88c743d8428fc4e4eaedfc1c9356754", "created": "2050-09-09T09:09:09.090909Z", }, @@ -1135,6 +1136,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): }, "version": 1, "tag": None, + "branch": None, "revision_url": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), } @@ -1402,6 +1404,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "state": WorkerVersionState.Created.value, "version": None, "tag": None, + "branch": None, "worker": { "id": str(self.worker_dla.id), "name": "Document layout analyser", @@ -1441,6 +1444,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "state": WorkerVersionState.Created.value, "version": 42, "tag": None, + "branch": None, "worker": { "id": str(self.worker_custom.id), "name": "Custom worker", @@ -1565,15 +1569,50 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), {"tag": ["A version already exists for this worker with this tag."]}) - def test_create_version_empty_tag(self): + def test_create_version_unassign_branch(self): + self.version_1.branch = "operation-yashima" + self.version_1.save() + self.version_2.branch = "operation-yashima" + self.version_2.save() + + with self.assertNumQueries(7): + response = self.client.post( + reverse("api:worker-versions", kwargs={"pk": str(self.worker_reco.id)}), + data={ + "configuration": {"test": "test2"}, + "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01", + "branch": "operation-yashima", + }, + HTTP_AUTHORIZATION=f"Ponos {self.task.token}", + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + new_version = WorkerVersion.objects.get(id=response.json()["id"]) + self.assertEqual(new_version.branch, "operation-yashima") + + self.version_1.refresh_from_db() + self.assertIsNone(self.version_1.branch) + + self.version_2.refresh_from_db() + self.assertEqual(self.version_2.branch, "operation-yashima") + + def test_create_version_empty_tag_branch(self): with self.assertNumQueries(3): response = self.client.post( reverse("api:worker-versions", kwargs={"pk": str(self.worker_reco.id)}), - data={"configuration": {"test": "test2"}, "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01", "tag": ""}, + data={ + "configuration": {"test": "test2"}, + "revision_url": "https://gitlab.com/NERV/eva/commit/eva-01", + "tag": "", + "branch": "", + }, HTTP_AUTHORIZATION=f"Ponos {self.task.token}", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), {"tag": ["This field may not be blank."]}) + self.assertDictEqual(response.json(), { + "tag": ["This field may not be blank."], + "branch": ["This field may not be blank."], + }) def test_create_version_wrong_gpu_usage(self): response = self.client.post( @@ -2135,6 +2174,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "worker": { "id": str(self.worker_reco.id), "name": "Recognizer", @@ -2162,6 +2202,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "worker": { "id": str(self.worker_reco.id), "name": "Recognizer", @@ -2227,29 +2268,47 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): def test_update_worker_version(self): """ Update worker version artifact, configuration, state and tag + Updating the branch should reset the branch on any other version on the same worker """ self.version_1.state = WorkerVersionState.Created self.version_1.save() - response = self.client.patch( - reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}), - data={ - "configuration": {"test": "test2"}, - "docker_image_iid": "eva:unit-01", - "state": "error", - "tag": "eva-01" - }, - HTTP_AUTHORIZATION=f"Ponos {self.task.token}", - ) - self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertNotEqual(self.version_1.worker_id, self.version_2.worker_id) + self.version_2.branch = "operation-yashima" + self.version_2.save() + + branch_version = self.version_1.worker.versions.create(branch="operation-yashima", version=2) + + with self.assertNumQueries(6): + response = self.client.patch( + reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}), + data={ + "configuration": {"test": "test2"}, + "docker_image_iid": "eva:unit-01", + "state": "error", + "tag": "eva-01", + "branch": "operation-yashima", + }, + HTTP_AUTHORIZATION=f"Ponos {self.task.token}", + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() self.assertEqual(data["id"], str(self.version_1.id)) + self.version_1.refresh_from_db() self.assertEqual(self.version_1.configuration, {"test": "test2"}) self.assertEqual(self.version_1.docker_image_iid, "eva:unit-01") self.assertEqual(self.version_1.state, WorkerVersionState.Error) self.assertEqual(self.version_1.gpu_usage, FeatureUsage.Disabled) self.assertEqual(self.version_1.tag, "eva-01") + self.assertEqual(self.version_1.branch, "operation-yashima") + + self.version_2.refresh_from_db() + self.assertEqual(self.version_2.branch, "operation-yashima") + + branch_version.refresh_from_db() + self.assertIsNone(branch_version.branch) def test_update_worker_version_unique_tag(self): self.worker_reco.versions.create( @@ -2270,17 +2329,21 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), {"tag": ["A version already exists for this worker with this tag."]}) - def test_update_worker_version_empty_tag(self): + def test_update_worker_version_empty_tag_branch(self): with self.assertNumQueries(2): response = self.client.patch( reverse("api:version-retrieve", kwargs={"pk": str(self.version_1.id)}), data={ - "tag": "" + "tag": "", + "branch": "", }, HTTP_AUTHORIZATION=f"Ponos {self.task.token}", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), {"tag": ["This field may not be blank."]}) + self.assertDictEqual(response.json(), { + "tag": ["This field may not be blank."], + "branch": ["This field may not be blank."], + }) def test_cannot_update_worker_version_revision_ignored(self): self.version_1.revision_url = "url" @@ -2382,6 +2445,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_2.docker_image_iid, @@ -2407,6 +2471,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_1.docker_image_iid, @@ -2464,6 +2529,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_2.docker_image_iid, @@ -2489,6 +2555,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_2.docker_image_iid, @@ -2542,6 +2609,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_2.docker_image_iid, @@ -2582,6 +2650,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_1.docker_image_iid, @@ -2641,6 +2710,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "gpu_usage": "disabled", "model_usage": FeatureUsage.Disabled.value, "docker_image_iid": self.version_1.docker_image_iid, diff --git a/arkindex/process/tests/worker_runs/test_create.py b/arkindex/process/tests/worker_runs/test_create.py index 0cf94a07eb..0e30114f0c 100644 --- a/arkindex/process/tests/worker_runs/test_create.py +++ b/arkindex/process/tests/worker_runs/test_create.py @@ -296,6 +296,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -371,6 +372,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -430,22 +432,24 @@ class TestWorkerRunsCreate(FixtureAPITestCase): ) cases = [ - ("eva-01", "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), - (None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), - ("eva-01", "revision_url", None, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) using configuration 'My config'"), - (None, "revision_url", self.model_version_1, None, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]}"), - ("eva-01", "revision_url", None, None, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]})"), - (None, "revision_url", None, None, f"Worker Recognizer @ {str(test_version.id)[:6]}"), - ("eva-01", None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 (version 5) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), - (None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), - ("eva-01", None, None, self.configuration_1, "Worker Recognizer @ eva-01 (version 5) using configuration 'My config'"), - (None, None, self.model_version_1, None, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]}"), - ("eva-01", None, None, None, "Worker Recognizer @ eva-01 (version 5)"), - (None, None, None, None, "Worker Recognizer @ version 5"), + ("eva-01", None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), + (None, None, "revision_url", self.model_version_1, self.configuration_1, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), + ("eva-01", None, "revision_url", None, self.configuration_1, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]}) using configuration 'My config'"), + (None, None, "revision_url", self.model_version_1, None, f"Worker Recognizer @ {str(test_version.id)[:6]} with model My model @ {str(self.model_version_1.id)[:6]}"), + ("eva-01", None, "revision_url", None, None, f"Worker Recognizer @ eva-01 ({str(test_version.id)[:6]})"), + (None, None, "revision_url", None, None, f"Worker Recognizer @ {str(test_version.id)[:6]}"), + ("eva-01", None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ eva-01 (version 5) with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), + (None, None, None, self.model_version_1, self.configuration_1, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]} using configuration 'My config'"), + ("eva-01", None, None, None, self.configuration_1, "Worker Recognizer @ eva-01 (version 5) using configuration 'My config'"), + (None, None, None, self.model_version_1, None, f"Worker Recognizer @ version 5 with model My model @ {str(self.model_version_1.id)[:6]}"), + ("eva-01", None, None, None, None, "Worker Recognizer @ eva-01 (version 5)"), + ("eva-01", "operation-yashima", None, None, None, "Worker Recognizer @ eva-01 (version 5)"), + (None, "operation-yashima", None, None, None, "Worker Recognizer @ operation-yashima (version 5)"), + (None, None, None, None, None, "Worker Recognizer @ version 5"), ] - for tag, revision_url, model_version, config, expected_summary in cases: - with self.subTest(tag=tag, model_version=model_version, config=config), transaction.atomic(): + for tag, branch, revision_url, model_version, config, expected_summary in cases: + with self.subTest(tag=tag, branch=branch, model_version=model_version, config=config), transaction.atomic(): # Clear the process of worker runs self.process_2.worker_runs.all().delete() @@ -453,6 +457,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): test_version.version = None test_version.tag = tag + test_version.branch = branch test_version.revision_url = revision_url if not revision_url: test_version.version = 5 @@ -516,6 +521,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): "revision_url": None, "version": worker_version.version, "tag": None, + "branch": None, "created": worker_version.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -571,6 +577,7 @@ class TestWorkerRunsCreate(FixtureAPITestCase): "revision_url": None, "version": 2, "tag": None, + "branch": None, "created": self.version_gpu_required.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/process/tests/worker_runs/test_list.py b/arkindex/process/tests/worker_runs/test_list.py index 63123a908d..2e35e780f2 100644 --- a/arkindex/process/tests/worker_runs/test_list.py +++ b/arkindex/process/tests/worker_runs/test_list.py @@ -63,6 +63,7 @@ class TestWorkerRunsList(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/process/tests/worker_runs/test_partial_update.py b/arkindex/process/tests/worker_runs/test_partial_update.py index 43b484a6a5..57967c88fa 100644 --- a/arkindex/process/tests/worker_runs/test_partial_update.py +++ b/arkindex/process/tests/worker_runs/test_partial_update.py @@ -245,6 +245,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -306,6 +307,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -372,6 +374,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -721,6 +724,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": version_with_model.version, "tag": None, + "branch": None, "created": version_with_model.created.isoformat().replace("+00:00", "Z"), "state": "created", "worker": { @@ -811,6 +815,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": version_with_model.version, "tag": None, + "branch": None, "created": version_with_model.created.isoformat().replace("+00:00", "Z"), "state": "created", "worker": { @@ -879,6 +884,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -1022,6 +1028,7 @@ class TestWorkerRunsPartialUpdate(FixtureAPITestCase): "revision_url": None, "version": worker_version.version, "tag": None, + "branch": None, "created": worker_version.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/process/tests/worker_runs/test_retrieve.py b/arkindex/process/tests/worker_runs/test_retrieve.py index 7c2471ee10..ef0af8081a 100644 --- a/arkindex/process/tests/worker_runs/test_retrieve.py +++ b/arkindex/process/tests/worker_runs/test_retrieve.py @@ -97,6 +97,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -157,6 +158,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -246,6 +248,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "created", "worker": { @@ -286,6 +289,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -357,6 +361,7 @@ class TestWorkerRunsretrieve(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/process/tests/worker_runs/test_update.py b/arkindex/process/tests/worker_runs/test_update.py index b4e38afa69..2fc6d6812a 100644 --- a/arkindex/process/tests/worker_runs/test_update.py +++ b/arkindex/process/tests/worker_runs/test_update.py @@ -267,6 +267,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -328,6 +329,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -397,6 +399,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { @@ -759,6 +762,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": version_with_model.version, "tag": None, + "branch": None, "created": version_with_model.created.isoformat().replace("+00:00", "Z"), "state": "created", "worker": { @@ -852,6 +856,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": version_with_model.version, "tag": None, + "branch": None, "created": version_with_model.created.isoformat().replace("+00:00", "Z"), "state": "created", "worker": { @@ -921,6 +926,7 @@ class TestWorkerRunsUpdate(FixtureAPITestCase): "revision_url": None, "version": 1, "tag": None, + "branch": None, "created": self.version_1.created.isoformat().replace("+00:00", "Z"), "state": "available", "worker": { diff --git a/arkindex/sql_validation/indexer_prefetch.sql b/arkindex/sql_validation/indexer_prefetch.sql index 2befb06882..ce59780059 100644 --- a/arkindex/sql_validation/indexer_prefetch.sql +++ b/arkindex/sql_validation/indexer_prefetch.sql @@ -69,6 +69,7 @@ SELECT "process_workerversion"."id", "process_workerversion"."model_usage", "process_workerversion"."docker_image_iid", "process_workerversion"."revision_url", + "process_workerversion"."branch", "process_workerversion"."tag", "process_workerversion"."feature", "process_workerversion"."created", @@ -160,6 +161,7 @@ SELECT "process_workerversion"."id", "process_workerversion"."model_usage", "process_workerversion"."docker_image_iid", "process_workerversion"."revision_url", + "process_workerversion"."branch", "process_workerversion"."tag", "process_workerversion"."feature", "process_workerversion"."created", -- GitLab