Exemple #1
0
    def put(self, request, pk, format=None):
        """
        Method used to update a Tag object, providing its id
        and updated data in a serialized form.

        @param request: HttpRequest containing the updated Tag field data.
        @type request: HttpRequest
        @param pk: Tag primary key, used to retrieve object data.
        @type pk: int
        @param format: Format used for data serialization.
        @type format: string
        @return: HttpResponse containing the serialized updated data
        @rtype: HttpResponse
        """
        logger.debug("Requested edit on Tag object with id " + str(pk))
        with edit_lock:
            tag = self.get_object(pk, request.user)
            serializer = TagSerializer(tag, data=request.data, partial=True)
            if serializer.is_valid():
                serializer.save()
                logger.debug("Updated data of Tag object with id " + str(pk))
                check_tags(tag, request.user)
                return Response(serializer.data)

            logger.error("Error on data update of Tag object with id " + str(pk))
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemple #2
0
    def post(self, request, format=None):
        """
        Method used to create a new Tag object.
        The object data is provided in a serialized format.
        If a similar Tag object (same entity, item and type) exists
        it must be returned instead of creating a new one.

        @param request: HttpRequest used to provide tag data.
        @type request: HttpRequest
        @param format: The format used for object serialization.
        @type format: string
        @return: HttpResponse containing the id of the new Tag object, error otherwise.
        @rtype: HttpResponse
        """
        logger.debug("Check if a similar Tag object exists")
        item = request.data.get("item", "")
        entity = request.data.get("entity", "")
        type = request.data.get("type", "")
        serializer = None

        item_obj = Item.user_objects.by_user(request.user).get(pk=item)
        if not (item_obj.owner == request.user):
            Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)

        tag = Tag.user_objects.by_user(request.user).filter(item_id=item, entity_id=entity, type=type)
        if len(tag) > 0:
            logger.debug("Returned an existing Tag object " + str(item) + " " + str(entity) + " " + str(type))
            serializer = TagSerializer(tag[0])
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            logger.debug("Creating a new Tag object")
            serializer = TagSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                logger.debug("New Tag object saved - " + str(serializer.data["id"]))
                return Response(serializer.data, status=status.HTTP_201_CREATED)

        logger.error("Provided data not valid for Tag object")
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)