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)
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)
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)
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))
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'])