From 186b9c9fa1df73456074dc57ce5f0d98ffcd3a97 Mon Sep 17 00:00:00 2001 From: mlbonhomme <bonhomme@teklia.com> Date: Thu, 3 Nov 2022 14:40:44 +0000 Subject: [PATCH] Remove _deserialize functions in worker runs tests --- arkindex/process/tests/test_workerruns.py | 930 +++++++++++++++++++--- 1 file changed, 819 insertions(+), 111 deletions(-) diff --git a/arkindex/process/tests/test_workerruns.py b/arkindex/process/tests/test_workerruns.py index c86015ea65..928b7fcce4 100644 --- a/arkindex/process/tests/test_workerruns.py +++ b/arkindex/process/tests/test_workerruns.py @@ -2,7 +2,6 @@ import uuid from django.urls import reverse from rest_framework import status -from rest_framework.serializers import DateTimeField from arkindex.process.models import GitRefType, ProcessMode, Revision, WorkerRun, WorkerVersion from arkindex.process.utils import get_default_farm_id @@ -25,101 +24,6 @@ tasks: ARTIFACT_ID = uuid.uuid4() -def _deserialize_worker_configuration(worker_config): - return { - 'id': str(worker_config.id), - 'name': worker_config.name, - 'configuration': worker_config.configuration, - 'archived': worker_config.archived, - } - - -def _deserialize_worker(worker): - return { - 'id': str(worker.id), - 'name': worker.name, - 'type': str(worker.type), - 'slug': worker.slug - } - - -def _deserialize_model(model): - return { - 'id': str(model.id), - 'name': model.name - } - - -def _deserialize_model_version(model_version): - return { - 'id': str(model_version.id), - 'model': _deserialize_model(model_version.model), - 'tag': model_version.tag, - 'state': model_version.state.value, - 'size': model_version.size, - 'configuration': model_version.configuration - } - - -def _deserialize_revision(revision): - return { - 'id': str(revision.id), - 'commit_url': revision.commit_url, - 'author': revision.author, - 'created': DateTimeField().to_representation(value=revision.created), - 'hash': revision.hash, - 'message': revision.message, - 'refs': [], - } - - -def _deserialize_worker_version(worker_version): - return { - 'id': str(worker_version.id), - 'revision': _deserialize_revision(worker_version.revision), - 'docker_image': str(worker_version.docker_image.id) if worker_version.docker_image else None, - 'docker_image_iid': str(worker_version.docker_image_iid) if worker_version.docker_image_iid else None, - 'docker_image_name': worker_version.docker_image_name, - 'configuration': worker_version.configuration, - 'state': worker_version.state.value, - 'gpu_usage': worker_version.gpu_usage.value, - 'model_usage': worker_version.model_usage, - 'worker': _deserialize_worker(worker_version.worker), - } - - -def _deserialize_worker_process(process): - return { - 'id': str(process.id), - 'name': process.name, - 'state': process.state.value, - 'mode': process.mode.value, - 'corpus': str(process.corpus.id), - 'workflow': (str(process.workflow) if process.workflow else None), - 'activity_state': process.activity_state.value, - 'model_id': str(process.model_id) if process.model_id else None, - 'train_folder_id': str(process.train_folder_id) if process.train_folder_id else None, - 'test_folder_id': str(process.test_folder_id) if process.test_folder_id else None, - 'validation_folder_id': str(process.validation_folder_id) if process.validation_folder_id else None, - } - - -def _deserialize_worker_run(worker_run): - return { - 'id': str(worker_run.id), - 'worker_version_id': str(worker_run.version.id), - 'process_id': str(worker_run.process.id), - 'parents': [str(parent_id) for parent_id in worker_run.parents], - 'model_version_id': str(worker_run.model_version_id) if worker_run.model_version_id else None, - 'worker': _deserialize_worker(worker_run.version.worker), - 'model_version': _deserialize_model_version(worker_run.model_version) if worker_run.model_version else None, - 'configuration_id': str(worker_run.configuration.id) if worker_run.configuration else None, - 'configuration': (_deserialize_worker_configuration(worker_run.configuration) if worker_run.configuration else None), - 'worker_version': _deserialize_worker_version(worker_run.version), - 'process': _deserialize_worker_process(worker_run.process), - } - - class TestWorkerRuns(FixtureAPITestCase): """ Test worker runs endpoints and methods @@ -436,7 +340,60 @@ class TestWorkerRuns(FixtureAPITestCase): reverse('api:worker-run-details', kwargs={'pk': str(self.run_1.id)}) ) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertDictEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) def test_retrieve_run_invalid_id(self): self.client.force_login(self.user) @@ -450,7 +407,60 @@ class TestWorkerRuns(FixtureAPITestCase): with self.assertNumQueries(8): response = self.client.get(reverse('api:worker-run-details', kwargs={'pk': str(self.run_1.id)})) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertDictEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertDictEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) def test_update_run_requires_id_and_parents(self): self.client.force_login(self.user) @@ -562,7 +572,60 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.run_1.refresh_from_db() self.assertEqual(self.run_1.process.id, self.process_1.id) @@ -581,7 +644,60 @@ class TestWorkerRuns(FixtureAPITestCase): }, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.run_1.refresh_from_db() self.assertNotEqual(self.run_1.version_id, dla_version.id) @@ -601,7 +717,66 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.run_1.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + + self.assertEqual(response.json(), { + 'configuration': { + 'archived': False, + 'configuration': {'key': 'value'}, + 'id': str(self.configuration_1.id), + 'name': 'My config' + }, + 'configuration_id': str(self.configuration_1.id), + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.assertEqual(self.run_1.configuration.id, self.configuration_1.id) # Check generated summary, after the update, the configuration should be displayed as well self.assertEqual(self.run_1.summary, f"Worker {self.run_1.version.worker.name} @ {str(self.run_1.version.id)[:6]} using configuration '{self.configuration_1.name}'") @@ -775,7 +950,71 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) run.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(run)) + + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(run.id), + 'model_version': { + 'configuration': {}, + 'id': str(self.model_version_1.id), + 'model': { + 'id': str(self.model_1.id), + 'name': 'My model' + }, + 'size': 8, + 'state': 'available', + 'tag': None + }, + 'model_version_id': str(self.model_version_1.id), + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 'test2'}, + 'docker_image': None, + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}', + 'gpu_usage': 'disabled', + 'id': str(version_with_model.id), + 'model_usage': True, + 'revision': { + 'author': 'bob', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/2', + 'created': rev.created.isoformat().replace('+00:00', 'Z'), + 'hash': '2', + 'id': str(rev.id), + 'message': 'beep boop', + 'refs': [] + }, + 'state': 'created', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(version_with_model.id) + }) self.assertEqual(run.model_version_id, self.model_version_1.id) # Check generated summary, after updating, there should be information about the model loaded self.assertEqual(run.summary, f"Worker {self.worker_1.name} @ {str(version_with_model.id)[:6]} with model {self.model_version_1.model.name} @ {str(self.model_version_1.id)[:6]}") @@ -815,7 +1054,75 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) run.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(run)) + self.assertEqual(response.json(), { + 'configuration': { + 'archived': False, + 'configuration': {'key': 'value'}, + 'id': str(self.configuration_1.id), + 'name': 'My config' + }, + 'configuration_id': str(self.configuration_1.id), + 'id': str(run.id), + 'model_version': { + 'configuration': {}, + 'id': str(self.model_version_1.id), + 'model': { + 'id': str(self.model_1.id), + 'name': 'My model' + }, + 'size': 8, + 'state': 'available', + 'tag': None + }, + 'model_version_id': str(self.model_version_1.id), + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 'test2'}, + 'docker_image': None, + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}', + 'gpu_usage': 'disabled', + 'id': str(version_with_model.id), + 'model_usage': True, + 'revision': { + 'author': 'bob', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/2', + 'created': rev_2.created.isoformat().replace('+00:00', 'Z'), + 'hash': '2', + 'id': str(rev_2.id), + 'message': 'beep boop', + 'refs': [] + }, + 'state': 'created', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(version_with_model.id) + }) self.assertEqual(run.model_version_id, self.model_version_1.id) # Check generated summary, after updating, there should be information about the model loaded self.assertEqual(run.summary, f"Worker {self.worker_1.name} @ {str(version_with_model.id)[:6]} with model {self.model_version_1.model.name} @ {str(self.model_version_1.id)[:6]} using configuration '{self.configuration_1.name}'") @@ -845,7 +1152,60 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.run_1.refresh_from_db() - self.assertDictEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertDictEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [str(run_2.id)], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) def test_partial_update_run_requires_login(self): rev_2 = self.repo.revisions.create( @@ -941,8 +1301,60 @@ class TestWorkerRuns(FixtureAPITestCase): }, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) - - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.run_1.refresh_from_db() self.assertEqual(self.run_1.process.id, self.process_1.id) @@ -961,7 +1373,60 @@ class TestWorkerRuns(FixtureAPITestCase): }, format='json' ) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.run_1.refresh_from_db() self.assertNotEqual(self.run_1.version_id, dla_version.id) @@ -979,7 +1444,65 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.run_1.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertEqual(response.json(), { + 'configuration': { + 'archived': False, + 'configuration': {'key': 'value'}, + 'id': str(self.configuration_1.id), + 'name': 'My config' + }, + 'configuration_id': str(self.configuration_1.id), + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) self.assertEqual(self.run_1.configuration.id, self.configuration_1.id) self.assertEqual(self.run_1.summary, f"Worker {self.run_1.version.worker.name} @ {str(self.run_1.version.id)[:6]} using configuration '{self.configuration_1.name}'") @@ -1147,7 +1670,70 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) run.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(run)) + self.assertEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(run.id), + 'model_version': { + 'configuration': {}, + 'id': str(self.model_version_1.id), + 'model': { + 'id': str(self.model_1.id), + 'name': 'My model' + }, + 'size': 8, + 'state': 'available', + 'tag': None + }, + 'model_version_id': str(self.model_version_1.id), + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 'test2'}, + 'docker_image': None, + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}', + 'gpu_usage': 'disabled', + 'id': str(version_with_model.id), + 'model_usage': True, + 'revision': { + 'author': 'bob', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/2', + 'created': rev.created.isoformat().replace('+00:00', 'Z'), + 'hash': '2', + 'id': str(rev.id), + 'message': 'beep boop', + 'refs': [] + }, + 'state': 'created', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(version_with_model.id) + }) self.assertEqual(run.model_version_id, self.model_version_1.id) self.assertEqual(run.summary, f"Worker {version_with_model.worker.name} @ {str(version_with_model.id)[:6]} with model {self.model_version_1.model.name} @ {str(self.model_version_1.id)[:6]}") @@ -1183,7 +1769,76 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) run.refresh_from_db() - self.assertEqual(response.json(), _deserialize_worker_run(run)) + self.maxDiff = None + self.assertEqual(response.json(), { + 'configuration': { + 'archived': False, + 'configuration': {'key': 'value'}, + 'id': str(self.configuration_1.id), + 'name': 'My config' + }, + 'configuration_id': str(self.configuration_1.id), + 'id': str(run.id), + 'model_version': { + 'configuration': {}, + 'id': str(self.model_version_1.id), + 'model': { + 'id': str(self.model_1.id), + 'name': 'My model' + }, + 'size': 8, + 'state': 'available', + 'tag': None + }, + 'model_version_id': str(self.model_version_1.id), + 'parents': [], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 'test2'}, + 'docker_image': None, + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}', + 'gpu_usage': 'disabled', + 'id': str(version_with_model.id), + 'model_usage': True, + 'revision': { + 'author': 'bob', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/2', + 'created': rev_2.created.isoformat().replace('+00:00', 'Z'), + 'hash': '2', + 'id': str(rev_2.id), + 'message': 'beep boop', + 'refs': [] + }, + 'state': 'created', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(version_with_model.id) + }) self.assertEqual(run.model_version_id, self.model_version_1.id) self.assertEqual(run.configuration_id, self.configuration_1.id) @@ -1212,7 +1867,60 @@ class TestWorkerRuns(FixtureAPITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) self.run_1.refresh_from_db() - self.assertDictEqual(response.json(), _deserialize_worker_run(self.run_1)) + self.assertDictEqual(response.json(), { + 'configuration': None, + 'configuration_id': None, + 'id': str(self.run_1.id), + 'model_version': None, + 'model_version_id': None, + 'parents': [str(run_2.id)], + 'process': { + 'activity_state': 'disabled', + 'corpus': str(self.corpus.id), + 'id': str(self.process_1.id), + 'mode': 'workers', + 'model_id': None, + 'name': None, + 'state': 'unscheduled', + 'test_folder_id': None, + 'train_folder_id': None, + 'validation_folder_id': None, + 'workflow': None + }, + 'process_id': str(self.process_1.id), + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + }, + 'worker_version': { + 'configuration': {'test': 42}, + 'docker_image': str(self.version_1.docker_image.id), + 'docker_image_iid': None, + 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}', + 'gpu_usage': 'disabled', + 'id': str(self.version_1.id), + 'model_usage': False, + 'revision': { + 'author': 'Test user', + 'commit_url': 'http://my_repo.fake/workers/worker/commit/1337', + 'created': self.version_1.revision.created.isoformat().replace('+00:00', 'Z'), + 'hash': '1337', + 'id': str(self.version_1.revision.id), + 'message': 'My w0rk3r', + 'refs': [] + }, + 'state': 'available', + 'worker': { + 'id': str(self.worker_1.id), + 'name': 'Recognizer', + 'slug': 'reco', + 'type': 'recognizer' + } + }, + 'worker_version_id': str(self.version_1.id) + }) def test_delete_run_requires_login(self): response = self.client.delete( -- GitLab