def perform_create(self, serializer): data = serializer.validated_data name = data.get('name') size = data.get('size') image_id = data.get('image') snapshot_id = data.get('snapshot') instance_source = data.get("instance_source") identity = instance_source.get("created_by_identity") provider = instance_source.get('provider') try: esh_volume = create_volume_or_fail(name, size, self.request.user, provider, identity, image_id=image_id, snapshot_id=snapshot_id) created_on = esh_volume.extra.get("createTime", timezone.now()) serializer.save(identifier=esh_volume.id, name=esh_volume.name, created_on=pytz.utc.localize(created_on), user=self.request.user) except InvalidCredsError as e: raise exceptions.PermissionDenied(detail=e.message) except ProviderNotActive as pna: return inactive_provider(pna) except VOLUME_EXCEPTIONS as e: raise exceptions.ParseError(detail=e.message)
def perform_create(self, serializer): data = serializer.validated_data name = data.get('name') size = data.get('size') image_id = data.get('image_id') snapshot_id = data.get('snapshot_id') description = data.get('description') instance_source = data.get("instance_source") identity = instance_source.get("created_by_identity") provider = identity.provider try: esh_volume = create_volume_or_fail(name, size, self.request.user, provider, identity, description=description, image_id=image_id, snapshot_id=snapshot_id) created_on = esh_volume.extra.get("createTime", timezone.now()) serializer.save(identifier=esh_volume.id, name=esh_volume.name, created_on=pytz.utc.localize(created_on), user=self.request.user) except InvalidCredsError as e: raise exceptions.PermissionDenied(detail=e.message) except ProviderNotActive as pna: return inactive_provider(pna) except VOLUME_EXCEPTIONS as e: raise exceptions.ParseError(detail=e.message) except Exception as exc: logger.exception("Error occurred creating a v2 volume -- User:%s" % self.request.user) return Response(exc.message, status=status.HTTP_409_CONFLICT)
def perform_create(self, serializer): data = serializer.validated_data name = data.get('name') size = data.get('size') image_id = data.get('image_id') snapshot_id = data.get('snapshot_id') description = data.get('description') instance_source = data.get("instance_source") identity = instance_source.get("created_by_identity") provider = identity.provider try: esh_volume = create_volume_or_fail(name, size, self.request.user, provider, identity, description=description, image_id=image_id, snapshot_id=snapshot_id) created_on = esh_volume.extra.get("createTime", timezone.now()) serializer.save(identifier=esh_volume.id, name=esh_volume.name, created_on=pytz.utc.localize(created_on), user=self.request.user) except InvalidCredsError as e: raise exceptions.PermissionDenied(detail=e.message) except ProviderNotActive as pna: return inactive_provider(pna) except VOLUME_EXCEPTIONS as e: raise exceptions.ParseError(detail=e.message) except Exception as exc: logger.exception("Error occurred creating a v2 volume -- User:%s" % self.request.user) return Response(exc.message, status=status.HTTP_409_CONFLICT)
def create(self, request): """ Override 'create' at a higher level than 'perform_create' so that we can swap Serializers behind-the-scenes. """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) #NOTE: This work normally happens in 'perform_create()' data = serializer.validated_data name = data.get('name') size = data.get('size') image_id = data.get('image_id') snapshot_id = data.get('snapshot_id') description = data.get('description') project = data.get('projects') identity = data.get("created_by_identity") provider = identity.provider try: core_volume = create_volume_or_fail(name, size, self.request.user, provider, identity, description=description, project=project, image_id=image_id, snapshot_id=snapshot_id) #NOTE: This is normally where 'perform_create()' would end # but we swap out the VolumeSerializer Class at this point. serialized_volume = VolumeSerializer( core_volume, context={'request': self.request}, data={}, partial=True) if not serialized_volume.is_valid(): return Response(serialized_volume.errors, status=status.HTTP_400_BAD_REQUEST) serialized_volume.save() headers = self.get_success_headers(serialized_volume.data) return Response(serialized_volume.data, status=status.HTTP_201_CREATED, headers=headers) except LibcloudInvalidCredsError as e: raise exceptions.PermissionDenied(detail=e.message) except ProviderNotActive as pna: return inactive_provider(pna) except VOLUME_EXCEPTIONS as e: raise exceptions.ParseError(detail=e.message) except Exception as exc: logger.exception("Error occurred creating a v2 volume -- User:%s" % self.request.user) return Response(exc.message, status=status.HTTP_409_CONFLICT)
def create(self, request): """ Override 'create' at a higher level than 'perform_create' so that we can swap Serializers behind-the-scenes. """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) #NOTE: This work normally happens in 'perform_create()' data = serializer.validated_data name = data.get('name') size = data.get('size') image_id = data.get('image_id') snapshot_id = data.get('snapshot_id') description = data.get('description') project = data.get('projects') identity = data.get("created_by_identity") provider = identity.provider try: core_volume = create_volume_or_fail( name, size, self.request.user, provider, identity, description=description, project=project, image_id=image_id, snapshot_id=snapshot_id) #NOTE: This is normally where 'perform_create()' would end # but we swap out the VolumeSerializer Class at this point. serialized_volume = VolumeSerializer( core_volume, context={'request': self.request}, data={}, partial=True) if not serialized_volume.is_valid(): return Response(serialized_volume.errors, status=status.HTTP_400_BAD_REQUEST) serialized_volume.save() headers = self.get_success_headers(serialized_volume.data) return Response( serialized_volume.data, status=status.HTTP_201_CREATED, headers=headers) except InvalidCredsError as e: raise exceptions.PermissionDenied(detail=e.message) except ProviderNotActive as pna: return inactive_provider(pna) except VOLUME_EXCEPTIONS as e: raise exceptions.ParseError(detail=e.message) except Exception as exc: logger.exception("Error occurred creating a v2 volume -- User:%s" % self.request.user) return Response(exc.message, status=status.HTTP_409_CONFLICT)