From b20314cd435ce8597fd20c6f79fc97f80f475920 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 3 Oct 2014 09:28:59 -0400 Subject: [PATCH] Add document folder list API endpoint --- mayan/apps/tags/api_views.py | 28 ++++++++++++++++++++++++++++ mayan/apps/tags/serializers.py | 1 + mayan/apps/tags/urls.py | 3 ++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/mayan/apps/tags/api_views.py b/mayan/apps/tags/api_views.py index 203e08b8b5..602d36f43b 100644 --- a/mayan/apps/tags/api_views.py +++ b/mayan/apps/tags/api_views.py @@ -1,8 +1,14 @@ 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 taggit.models import Tag +from documents.models import Document +from documents.permissions import PERMISSION_DOCUMENT_VIEW +from permissions.models import Permission from rest_api.filters import MayanObjectPermissionsFilter from rest_api.permissions import MayanPermission @@ -31,3 +37,25 @@ class APITagListView(generics.ListAPIView): filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': [PERMISSION_TAG_VIEW]} + + +class APIDocumentTagListView(generics.ListAPIView): + """ + Returns a list of all the tags attached to a document. + """ + + serializer_class = TagSerializer + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_TAG_VIEW]} + + def get_queryset(self): + document = get_object_or_404(Document, pk=self.kwargs['pk']) + try: + Permission.objects.check_permissions(self.request.user, [PERMISSION_DOCUMENT_VIEW]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, self.request.user, document) + + queryset = document.tags.all() + return queryset diff --git a/mayan/apps/tags/serializers.py b/mayan/apps/tags/serializers.py index 36d6217648..9bba498440 100644 --- a/mayan/apps/tags/serializers.py +++ b/mayan/apps/tags/serializers.py @@ -17,4 +17,5 @@ class TagSerializer(serializers.HyperlinkedModelSerializer): color = serializers.CharField(source='properties.get.color') class Meta: + fields = ('id', 'url', 'name', 'color', 'slug') model = Tag diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index 51d880aae4..fdcfe8b24d 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -2,7 +2,7 @@ from __future__ import absolute_import from django.conf.urls import patterns, url -from .api_views import APITagListView, APITagView +from .api_views import APIDocumentTagListView, APITagListView, APITagView urlpatterns = patterns('tags.views', url(r'^list/$', 'tag_list', (), 'tag_list'), @@ -26,4 +26,5 @@ urlpatterns = patterns('tags.views', 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'), )