diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py index ad5822ab9f2625429b84103119b81f6be638f1d9..52975d292ecfc2d3290368077c2a9878e1c5a38e 100644 --- a/arkindex/dataimport/api.py +++ b/arkindex/dataimport/api.py @@ -79,13 +79,25 @@ class DataImportsList(CorpusACLMixin, ListAPIView): 'schema': { 'type': 'string', }, + }, + { + 'name': 'with_workflow', + 'in': 'query', + 'description': 'Restrict to or exclude import with workflow', + 'required': False, + 'schema': { + 'type': 'boolean', + 'default': True + }, } ] } def get_queryset(self): + with_workflow = self.request.query_params.get('with_workflow') filters = { - 'corpus__in': Corpus.objects.readable(self.request.user) + 'corpus__in': Corpus.objects.readable(self.request.user), + 'workflow__isnull': bool(with_workflow and with_workflow.lower() in ('false', '0')) } if 'corpus' in self.request.query_params: diff --git a/arkindex/dataimport/tests/test_imports.py b/arkindex/dataimport/tests/test_imports.py index ff2c407a122cd027057a665ca2ea7cc9c0b7990c..8555c95789ac6e9c62078fafdcaa5e722f94469f 100644 --- a/arkindex/dataimport/tests/test_imports.py +++ b/arkindex/dataimport/tests/test_imports.py @@ -55,7 +55,7 @@ class TestImports(FixtureAPITestCase): def test_list(self): self.client.force_login(self.user) - response = self.client.get(reverse('api:import-list')) + response = self.client.get(reverse('api:import-list'), {'with_workflow': False}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -81,15 +81,9 @@ class TestImports(FixtureAPITestCase): response = self.client.get(reverse('api:import-list')) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() - self.assertEqual(len(data['results']), 2) + self.assertEqual(len(data['results']), 1) results = data['results'] self.assertListEqual(results, [{ - 'id': str(self.dataimport.id), - 'state': State.Unscheduled.value, - 'mode': DataImportMode.Images.value, - 'corpus': str(self.corpus.id), - 'workflow': None, - }, { 'id': str(dataimport2.id), 'state': State.Unscheduled.value, 'mode': DataImportMode.Workers.value, @@ -97,12 +91,25 @@ class TestImports(FixtureAPITestCase): 'workflow': f"http://testserver/ponos/v1/workflow/{dataimport2.workflow.id}/", }]) + response = self.client.get(reverse('api:import-list'), {'with_workflow': False}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(len(data['results']), 1) + results = data['results'] + self.assertListEqual(results, [{ + 'id': str(self.dataimport.id), + 'state': State.Unscheduled.value, + 'mode': DataImportMode.Images.value, + 'corpus': str(self.corpus.id), + 'workflow': None, + }]) + def test_list_filter_corpus(self): self.client.force_login(self.superuser) corpus2 = Corpus.objects.create(name='Another corpus', description='something') dataimport2 = corpus2.imports.create(creator=self.user, mode=DataImportMode.Images) - response = self.client.get(reverse('api:import-list'), {'corpus': str(corpus2.id)}) + response = self.client.get(reverse('api:import-list'), {'corpus': str(corpus2.id), 'with_workflow': False}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -120,7 +127,7 @@ class TestImports(FixtureAPITestCase): creator=self.user, mode=DataImportMode.PDF, ) - response = self.client.get(reverse('api:import-list'), {'mode': DataImportMode.PDF.value}) + response = self.client.get(reverse('api:import-list'), {'mode': DataImportMode.PDF.value, 'with_workflow': False}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -145,7 +152,7 @@ class TestImports(FixtureAPITestCase): creator=self.user, mode=DataImportMode.Images, ) - response = self.client.get(reverse('api:import-list'), {'id': dataimport_id[:10]}) + response = self.client.get(reverse('api:import-list'), {'id': dataimport_id[:10], 'with_workflow': False}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1)