From 4b2181549798393afb80f712bb9d795e6862ae94 Mon Sep 17 00:00:00 2001 From: Eva Bardou <ebardou@teklia.com> Date: Fri, 12 Jun 2020 13:06:28 +0000 Subject: [PATCH] Add an endpoint to retrieve a WorkerVersion by its ID --- arkindex/dataimport/api.py | 16 +++++++++++++++ arkindex/dataimport/tests/test_workers_api.py | 20 +++++++++++++++++++ arkindex/project/api_v1.py | 3 ++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py index 825e480e12..495f1a8541 100644 --- a/arkindex/dataimport/api.py +++ b/arkindex/dataimport/api.py @@ -649,3 +649,19 @@ class WorkerVersionList(ListCreateAPIView): reponse_status = status.HTTP_201_CREATED if created else status.HTTP_200_OK return Response(WorkerVersionSerializer(version).data, status=reponse_status) + + +class WorkerVersionRetrieve(CorpusACLMixin, RetrieveAPIView): + """ + Retrieve a specific worker version + """ + permission_classes = (IsVerified, ) + serializer_class = WorkerVersionSerializer + openapi_overrides = { + 'tags': ['repos'], + } + + def get_queryset(self): + return WorkerVersion.objects.filter( + revision__repo__corpus__in=Corpus.objects.readable(self.request.user), + ) diff --git a/arkindex/dataimport/tests/test_workers_api.py b/arkindex/dataimport/tests/test_workers_api.py index 7a70e59761..7694a94c50 100644 --- a/arkindex/dataimport/tests/test_workers_api.py +++ b/arkindex/dataimport/tests/test_workers_api.py @@ -220,3 +220,23 @@ class TestWorkersWorkerVersions(FixtureAPITestCase): 'revision': ['This field is required.'], 'configuration': ['This field is required.'] }) + + def test_retrieve_version_requires_login(self): + response = self.client.get(reverse('api:version-retrieve', kwargs={'pk': str(self.version_1.id)})) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_retrieve_version_invalid_id(self): + self.client.force_login(self.user) + response = self.client.get( + reverse('api:version-retrieve', kwargs={'pk': '12341234-1234-1234-1234-123412341234'}) + ) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_retrieve_version(self): + self.client.force_login(self.user) + response = self.client.get(reverse('api:version-retrieve', kwargs={'pk': str(self.version_1.id)})) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(data['id'], str(self.version_1.id)) + self.assertEqual(data['configuration'], {"test": "test1"}) + self.assertEqual(data['revision']['id'], str(self.rev.id)) diff --git a/arkindex/project/api_v1.py b/arkindex/project/api_v1.py index 5022e2b682..3ba7200c58 100644 --- a/arkindex/project/api_v1.py +++ b/arkindex/project/api_v1.py @@ -27,7 +27,7 @@ from arkindex.dataimport.api import ( DataFileList, DataFileRetrieve, DataFileUpload, DataImportFromFiles, RepositoryList, RepositoryRetrieve, RepositoryStartImport, DataFileCreate, GitRepositoryImportHook, AvailableRepositoriesList, RevisionRetrieve, - MLToolList, CorpusWorkflow, WorkerList, WorkerVersionList + MLToolList, CorpusWorkflow, WorkerList, WorkerVersionList, WorkerVersionRetrieve ) from arkindex.images.api import ImageCreate, IIIFURLCreate, IIIFInformationCreate, ImageRetrieve, ImageElements from arkindex.users.api import ( @@ -129,6 +129,7 @@ api = [ # Workers path('imports/repos/<uuid:pk>/workers/', WorkerList.as_view(), name='repository-workers'), path('workers/<uuid:pk>/versions/', WorkerVersionList.as_view(), name='worker-versions'), + path('workers/versions/<uuid:pk>/', WorkerVersionRetrieve.as_view(), name='version-retrieve'), # Import workflows path('imports/', DataImportsList.as_view(), name='import-list'), -- GitLab