B: Fix error response to invalid file type
This commit is contained in:
parent
25029a212b
commit
a4e2d2c25f
|
@ -361,6 +361,11 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
||||||
model = self._get_item()
|
model = self._get_item()
|
||||||
load_metadata = input_serializer.validated_data['load_metadata']
|
load_metadata = input_serializer.validated_data['load_metadata']
|
||||||
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
||||||
|
if data is None:
|
||||||
|
return Response(
|
||||||
|
status=c.HTTP_400_BAD_REQUEST,
|
||||||
|
data={'file': msg.exteorFileCorrupted()}
|
||||||
|
)
|
||||||
data['id'] = model.pk
|
data['id'] = model.pk
|
||||||
|
|
||||||
serializer = s.RSFormTRSSerializer(
|
serializer = s.RSFormTRSSerializer(
|
||||||
|
@ -486,11 +491,17 @@ class TrsImportView(views.APIView):
|
||||||
request=s.FileSerializer,
|
request=s.FileSerializer,
|
||||||
responses={
|
responses={
|
||||||
c.HTTP_201_CREATED: LibraryItemSerializer,
|
c.HTTP_201_CREATED: LibraryItemSerializer,
|
||||||
|
c.HTTP_400_BAD_REQUEST: None,
|
||||||
c.HTTP_403_FORBIDDEN: None
|
c.HTTP_403_FORBIDDEN: None
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def post(self, request: Request) -> HttpResponse:
|
def post(self, request: Request) -> HttpResponse:
|
||||||
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
||||||
|
if data is None:
|
||||||
|
return Response(
|
||||||
|
status=c.HTTP_400_BAD_REQUEST,
|
||||||
|
data={'file': msg.exteorFileCorrupted()}
|
||||||
|
)
|
||||||
owner = cast(User, self.request.user)
|
owner = cast(User, self.request.user)
|
||||||
_prepare_rsform_data(data, request, owner)
|
_prepare_rsform_data(data, request, owner)
|
||||||
serializer = s.RSFormTRSSerializer(
|
serializer = s.RSFormTRSSerializer(
|
||||||
|
@ -526,6 +537,11 @@ def create_rsform(request: Request) -> HttpResponse:
|
||||||
)
|
)
|
||||||
|
|
||||||
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
data = utility.read_zipped_json(request.FILES['file'].file, utils.EXTEOR_INNER_FILENAME)
|
||||||
|
if data is None:
|
||||||
|
return Response(
|
||||||
|
status=c.HTTP_400_BAD_REQUEST,
|
||||||
|
data={'file': msg.exteorFileCorrupted()}
|
||||||
|
)
|
||||||
_prepare_rsform_data(data, request, owner)
|
_prepare_rsform_data(data, request, owner)
|
||||||
serializer_rsform = s.RSFormTRSSerializer(data=data, context={'load_meta': True})
|
serializer_rsform = s.RSFormTRSSerializer(data=data, context={'load_meta': True})
|
||||||
serializer_rsform.is_valid(raise_exception=True)
|
serializer_rsform.is_valid(raise_exception=True)
|
||||||
|
|
|
@ -14,6 +14,10 @@ def operationNotInOSS(title: str):
|
||||||
return f'Операция не принадлежит ОСС: {title}'
|
return f'Операция не принадлежит ОСС: {title}'
|
||||||
|
|
||||||
|
|
||||||
|
def exteorFileCorrupted():
|
||||||
|
return 'Файл Экстеор не соответствует ожидаемому формату. Попробуйте сохранить файл в новой версии'
|
||||||
|
|
||||||
|
|
||||||
def previousResultMissing():
|
def previousResultMissing():
|
||||||
return 'Отсутствует результат предыдущей операции'
|
return 'Отсутствует результат предыдущей операции'
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
''' Utility functions. '''
|
''' Utility functions. '''
|
||||||
import json
|
import json
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from zipfile import ZipFile
|
from typing import Optional
|
||||||
|
from zipfile import BadZipFile, ZipFile
|
||||||
|
|
||||||
|
|
||||||
def read_zipped_json(data, json_filename: str) -> dict:
|
def read_zipped_json(data, json_filename: str) -> Optional[dict]:
|
||||||
''' Read JSON from zipped data '''
|
''' Read JSON from zipped data. '''
|
||||||
with ZipFile(data, 'r') as archive:
|
try:
|
||||||
json_data = archive.read(json_filename)
|
with ZipFile(data, 'r') as archive:
|
||||||
|
json_data = archive.read(json_filename)
|
||||||
|
except BadZipFile:
|
||||||
|
return None
|
||||||
result: dict = json.loads(json_data)
|
result: dict = json.loads(json_data)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user