Skip to content
Snippets Groups Projects
Commit ed0a3e4d authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

Fix HTTP 500 errors on wrong filter values in ListDataImports

parent 81ded3a9
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,7 @@ from arkindex_common.ml_tool import MLTool
from arkindex_common.enums import DataImportMode
from ponos.models import State
from datetime import datetime
from uuid import UUID
import hashlib
import magic
import os.path
......@@ -45,6 +46,36 @@ class DataImportsList(CorpusACLMixin, ListAPIView):
openapi_overrides = {
'operationId': 'ListDataImports',
'tags': ['imports'],
'parameters': [
{
'name': 'corpus',
'in': 'query',
'description': 'Filter imports by corpus ID',
'required': False,
'schema': {
'type': 'string',
'format': 'uuid',
}
},
{
'name': 'mode',
'in': 'query',
'description': 'Filter imports by mode',
'required': False,
'schema': {
'enum': [mode.value for mode in DataImportMode],
},
},
{
'name': 'id',
'in': 'query',
'description': 'Filter imports by beginning of UUID',
'required': False,
'schema': {
'type': 'string',
},
}
]
}
def get_queryset(self):
......@@ -53,13 +84,20 @@ class DataImportsList(CorpusACLMixin, ListAPIView):
}
if 'corpus' in self.request.query_params:
filters['corpus'] = self.get_corpus(self.request.query_params['corpus'])
corpus_id = self.request.query_params['corpus']
try:
corpus_id = UUID(corpus_id)
except (AttributeError, ValueError):
raise ValidationError({'corpus': "'{}' is not a valid UUID".format(corpus_id)})
filters['corpus'] = self.get_corpus(corpus_id)
if 'mode' in self.request.query_params:
try:
filters['mode'] = DataImportMode(self.request.query_params['mode'])
except ValueError:
raise ValidationError("Mode '{}' does not exist".format(self.request.query_params['mode']))
raise ValidationError({
'mode': "Mode '{}' does not exist".format(self.request.query_params['mode']),
})
if 'id' in self.request.query_params:
filters['id__startswith'] = self.request.query_params['id']
......
......@@ -57,6 +57,12 @@ class TestImports(FixtureAPITestCase):
self.assertEqual(len(data['results']), 1)
self.assertEqual(data['results'][0]['id'], str(dataimport2.id))
def test_list_filter_corpus_invalid(self):
self.client.force_login(self.user)
response = self.client.get(reverse('api:import-list'), {'corpus': 'oh-no'})
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.json(), {'corpus': "'oh-no' is not a valid UUID"})
def test_list_filter_mode(self):
self.client.force_login(self.user)
dataimport2 = self.corpus.imports.create(
......@@ -73,6 +79,7 @@ class TestImports(FixtureAPITestCase):
self.client.force_login(self.user)
response = self.client.get(reverse('api:import-list'), {'mode': 'unexisting_mode'})
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.json(), {'mode': "Mode 'unexisting_mode' does not exist"})
def test_list_filter_id(self):
self.client.force_login(self.user)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment