From 464f0f099b1bf77b3440b7b3a928172ccd131852 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 16 Oct 2014 11:16:43 -0400 Subject: [PATCH] Add API endpoint to remove a tag from a document --- mayan/apps/tags/api_views.py | 33 +++++++++++++++++++++++++++++++-- mayan/apps/tags/urls.py | 5 +++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/mayan/apps/tags/api_views.py b/mayan/apps/tags/api_views.py index 1f3d0dec00..d9daa1453d 100644 --- a/mayan/apps/tags/api_views.py +++ b/mayan/apps/tags/api_views.py @@ -3,7 +3,8 @@ from __future__ import absolute_import from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404 -from rest_framework import generics +from rest_framework import generics, status +from rest_framework.response import Response from taggit.models import Tag from acls.models import AccessEntry @@ -13,7 +14,7 @@ from permissions.models import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission -from .permissions import PERMISSION_TAG_VIEW +from .permissions import PERMISSION_TAG_REMOVE, PERMISSION_TAG_VIEW from .serializers import TagSerializer @@ -82,3 +83,31 @@ class APIDocumentTagListView(generics.ListAPIView): queryset = document.tags.all() return queryset + + +class APIDocumentTagRemoveView(generics.DestroyAPIView): + """ + Remove a tag from a document. + """ + + serializer_class = TagSerializer + + def get_document(self): + document = get_object_or_404(Document, pk=self.kwargs['document_pk']) + try: + Permission.objects.check_permissions(self.request.user, [PERMISSION_TAG_REMOVE]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_TAG_REMOVE, self.request.user, document) + + return document + + def delete(self, request, *args, **kwargs): + tag = self.get_object() + document = self.get_document() + + document.tags.remove(tag) + return Response(status=status.HTTP_204_NO_CONTENT) + + def get_queryset(self): + document = self.get_document() + return document.tags.all() diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index cfd0195df8..66a265ed06 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -2,8 +2,8 @@ from __future__ import absolute_import from django.conf.urls import patterns, url -from .api_views import (APIDocumentTagListView, APITagDocumentListView, - APITagListView, APITagView) +from .api_views import (APIDocumentTagRemoveView, APIDocumentTagListView, + APITagDocumentListView, APITagListView, APITagView) from .views import TagTaggedItemListView urlpatterns = patterns('tags.views', @@ -30,4 +30,5 @@ api_urls = patterns('', url(r'^tags/(?P[0-9]+)/$', APITagView.as_view(), name='tag-detail'), url(r'^tags/$', APITagListView.as_view(), name='tag-list'), url(r'^document/(?P[0-9]+)/tags/$', APIDocumentTagListView.as_view(), name='document-tag-list'), + url(r'^document/(?P[0-9]+)/tags/(?P[0-9]+)/remove/$', APIDocumentTagRemoveView.as_view(), name='document-tag-remove'), )