Example #1
0
 def update(self, request, pk=None, project_pk=None):
     project = get_object_or_404(Project, pk=project_pk, owner=request.user)
     instance = File.objects.get(pk=pk, project=project)
     serializer = FileSerializer(instance, data=request.data)
     serializer.is_valid(raise_exception=True)
     serializer.save()
     return Response(serializer.data)
Example #2
0
    def create(self, request, project_pk=None):
        project = get_object_or_404(Project, pk=project_pk, owner=request.user)

        serializer = FileSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save(project=project)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
Example #3
0
 def list(self, request, project_pk=None):
     files = self.queryset.filter(project=project_pk)
     serializer = FileSerializer(files, many=True,
                                 context={"request": request})
     return Response(serializer.data)
Example #4
0
 def test_file_serializer_multi_upload(self):
     serializer = FileSerializer(data=self.valid_images_multi_upload_data)
     self.assertTrue(serializer.is_valid())
     upload_fields = ['id', 'filefield']
     self.assertEqual(set(serializer.data.keys()), set(upload_fields))
Example #5
0
    def post(self, request, format=None):
        session = boto3.session.Session(
            aws_access_key_id=COGNITO_ACCESS_KEY_ID,
            aws_secret_access_key=COGNITO_SECRET_ACCESS_KEY,
            region_name=AWS_REGION)
        cognito = session.client("cognito-idp")
        try:
            if not 'AccessToken' in request.headers.keys():
                raise cognito.exceptions.NotAuthorizedException(
                    auth_error_response(), "FileUpload")
            user = cognito.get_user(AccessToken=request.headers['AccessToken'])
            uploadedList = []

            for idx, file in enumerate(request.FILES.getlist('file')):
                uploadedFile = {}
                file_path = str(request.data.getlist('path')[idx])
                if not file_path:
                    user = cognito.admin_get_user(
                        UserPoolId=COGNITO_USER_POOL_ID,
                        Username=user['Username'])
                    file_path = next(
                        (user_attribute
                         for user_attribute in user['UserAttributes']
                         if user_attribute['Name'] == 'custom:baseDirID'),
                        False)['Value']
                file.name = self.checkDuplicate(file.name, file_path)

                uploadedFile['name'] = file.name
                uploadedFile['path'] = file_path
                uploadedFile['isFile'] = request.data.getlist('isFile')[idx]
                uploadedFile['author'] = request.data.getlist('author')[idx]
                uploadedFile['fileSize'] = request.data.getlist(
                    'fileSize')[idx]

                serializer = FileSerializer(data=uploadedFile)
                if serializer.is_valid(raise_exception=True):
                    serializer.save()

                    session = boto3.session.Session(
                        aws_access_key_id=S3_ACCESS_KEY_ID,
                        aws_secret_access_key=S3_SECRET_ACCESS_KEY,
                        region_name=AWS_REGION)
                    s3 = session.resource('s3')
                    s3.Bucket(S3_STORAGE_BUCKET_NAME).put_object(Key=str(
                        File.objects.get(name=file.name).pk),
                                                                 Body=file)

                    uploadedList.append(serializer.data)
            return Response(uploadedList, status=status.HTTP_201_CREATED)
        except ValidationError:
            return Response(
                {
                    'error': 'NoRequiredParameter',
                    'date': datetime.now()
                },
                status=status.HTTP_400_BAD_REQUEST)
        except ClientError as error:
            return Response(
                {
                    'error':
                    error.response['Error']['Code'],
                    'date':
                    error.response['ResponseMetadata']['HTTPHeaders']['date']
                },
                status=error.response['ResponseMetadata']['HTTPStatusCode'])