mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
B: Fix error response to invalid file type
This commit is contained in:
parent
091b79f19b
commit
89889c9f40
|
@ -361,6 +361,11 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
model = self._get_item()
|
||||
load_metadata = input_serializer.validated_data['load_metadata']
|
||||
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
|
||||
|
||||
serializer = s.RSFormTRSSerializer(
|
||||
|
@ -486,11 +491,17 @@ class TrsImportView(views.APIView):
|
|||
request=s.FileSerializer,
|
||||
responses={
|
||||
c.HTTP_201_CREATED: LibraryItemSerializer,
|
||||
c.HTTP_400_BAD_REQUEST: None,
|
||||
c.HTTP_403_FORBIDDEN: None
|
||||
}
|
||||
)
|
||||
def post(self, request: Request) -> HttpResponse:
|
||||
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)
|
||||
_prepare_rsform_data(data, request, owner)
|
||||
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)
|
||||
if data is None:
|
||||
return Response(
|
||||
status=c.HTTP_400_BAD_REQUEST,
|
||||
data={'file': msg.exteorFileCorrupted()}
|
||||
)
|
||||
_prepare_rsform_data(data, request, owner)
|
||||
serializer_rsform = s.RSFormTRSSerializer(data=data, context={'load_meta': True})
|
||||
serializer_rsform.is_valid(raise_exception=True)
|
||||
|
|
|
@ -14,6 +14,10 @@ def operationNotInOSS(title: str):
|
|||
return f'Операция не принадлежит ОСС: {title}'
|
||||
|
||||
|
||||
def exteorFileCorrupted():
|
||||
return 'Файл Экстеор не соответствует ожидаемому формату. Попробуйте сохранить файл в новой версии'
|
||||
|
||||
|
||||
def previousResultMissing():
|
||||
return 'Отсутствует результат предыдущей операции'
|
||||
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
''' Utility functions. '''
|
||||
import json
|
||||
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:
|
||||
''' Read JSON from zipped data '''
|
||||
def read_zipped_json(data, json_filename: str) -> Optional[dict]:
|
||||
''' Read JSON from zipped data. '''
|
||||
try:
|
||||
with ZipFile(data, 'r') as archive:
|
||||
json_data = archive.read(json_filename)
|
||||
except BadZipFile:
|
||||
return None
|
||||
result: dict = json.loads(json_data)
|
||||
return result
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user