|
|
@ -1,37 +0,0 @@ |
|
|
|
import json |
|
|
|
|
|
|
|
from django.db import IntegrityError, transaction |
|
|
|
from django.shortcuts import get_object_or_404 |
|
|
|
from rest_framework import status |
|
|
|
from rest_framework.exceptions import ParseError |
|
|
|
from rest_framework.parsers import MultiPartParser |
|
|
|
from rest_framework.permissions import IsAuthenticated |
|
|
|
from rest_framework.response import Response |
|
|
|
from rest_framework.views import APIView |
|
|
|
|
|
|
|
from labels.serializers import AnnotationRelationsSerializer |
|
|
|
from members.permissions import IsProjectAdmin |
|
|
|
|
|
|
|
from ...exceptions import AnnotationRelationValidationError |
|
|
|
from ...models import Project |
|
|
|
|
|
|
|
|
|
|
|
class RelationUploadAPI(APIView): |
|
|
|
parser_classes = (MultiPartParser,) |
|
|
|
permission_classes = [IsAuthenticated & IsProjectAdmin] |
|
|
|
|
|
|
|
@transaction.atomic |
|
|
|
def post(self, request, *args, **kwargs): |
|
|
|
if 'file' not in request.data: |
|
|
|
raise ParseError('Empty content') |
|
|
|
project = get_object_or_404(Project, pk=kwargs['project_id']) |
|
|
|
try: |
|
|
|
annotation_relations = json.load(request.data) |
|
|
|
serializer = AnnotationRelationsSerializer(data=annotation_relations, many=True) |
|
|
|
serializer.is_valid(raise_exception=True) |
|
|
|
serializer.save(project=project) |
|
|
|
return Response(status=status.HTTP_201_CREATED) |
|
|
|
except json.decoder.JSONDecodeError: |
|
|
|
raise ParseError('The file format is invalid.') |
|
|
|
except IntegrityError: |
|
|
|
raise AnnotationRelationValidationError |