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