From 6eada315ce65f0b2b97f9062723fe6970bb531de Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 9 Jul 2014 19:12:12 -0400 Subject: [PATCH] Add tag app API endpoints --- mayan/apps/tags/__init__.py | 12 +++++++++--- mayan/apps/tags/serializers.py | 11 +++++++++++ mayan/apps/tags/urls.py | 9 +++++++++ mayan/apps/tags/views.py | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 mayan/apps/tags/serializers.py diff --git a/mayan/apps/tags/__init__.py b/mayan/apps/tags/__init__.py index eba380be57..d5da8c6d16 100644 --- a/mayan/apps/tags/__init__.py +++ b/mayan/apps/tags/__init__.py @@ -2,14 +2,15 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ +from taggit.managers import TaggableManager +from taggit.models import Tag + from acls.api import class_permissions from common.utils import encapsulate from documents.models import Document from navigation.api import (register_links, register_top_menu, register_model_list_columns, register_multi_item_links) - -from taggit.managers import TaggableManager -from taggit.models import Tag +from rest_api.classes import APIEndPoint from .links import (tag_list, tag_create, tag_attach, tag_document_list, tag_delete, tag_edit, tag_tagged_item_list, @@ -17,6 +18,7 @@ from .links import (tag_list, tag_create, tag_attach, single_document_multiple_tag_remove, multiple_documents_selection_tag_remove) from .permissions import (PERMISSION_TAG_ATTACH, PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, PERMISSION_TAG_VIEW) +from .urls import api_urls from .widgets import (get_tags_inline_widget_simple, single_tag_widget) register_model_list_columns(Tag, [ @@ -59,3 +61,7 @@ class_permissions(Tag, [ ]) Document.add_to_class('tags', TaggableManager()) + +endpoint = APIEndPoint('tags') +endpoint.register_urls(api_urls) +endpoint.add_endpoint('tag-list', _(u'Returns a list of all the tags.')) diff --git a/mayan/apps/tags/serializers.py b/mayan/apps/tags/serializers.py new file mode 100644 index 0000000000..e6b44b5d10 --- /dev/null +++ b/mayan/apps/tags/serializers.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import + +from rest_framework import serializers +from taggit.models import Tag + + +class TagSerializer(serializers.HyperlinkedModelSerializer): + color = serializers.CharField(source='properties.get.color') + + class Meta: + model = Tag diff --git a/mayan/apps/tags/urls.py b/mayan/apps/tags/urls.py index ceb319af6b..c1e30a853d 100644 --- a/mayan/apps/tags/urls.py +++ b/mayan/apps/tags/urls.py @@ -1,5 +1,9 @@ +from __future__ import absolute_import + from django.conf.urls import patterns, url +from .views import APITagListView, APITagView + urlpatterns = patterns('tags.views', url(r'^list/$', 'tag_list', (), 'tag_list'), url(r'^create/$', 'tag_create', (), 'tag_create'), @@ -18,3 +22,8 @@ urlpatterns = patterns('tags.views', url(r'^(?P\d+)/acl/list/$', 'tag_acl_list', (), 'tag_acl_list'), ) + +api_urls = patterns('', + url(r'^tags/(?P[0-9]+)/$', APITagView.as_view(), name='tag-detail'), + url(r'^tags/$', APITagListView.as_view(), name='tag-list'), +) diff --git a/mayan/apps/tags/views.py b/mayan/apps/tags/views.py index af9e148918..4a785b485e 100644 --- a/mayan/apps/tags/views.py +++ b/mayan/apps/tags/views.py @@ -10,6 +10,9 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ +from rest_framework import generics +from taggit.models import Tag + from acls.models import AccessEntry from acls.views import acl_list_for from acls.utils import apply_default_acls @@ -17,13 +20,15 @@ from documents.models import Document from documents.views import document_list from documents.permissions import PERMISSION_DOCUMENT_VIEW from permissions.models import Permission -from taggit.models import Tag +from rest_api.filters import MayanObjectPermissionsFilter +from rest_api.permissions import MayanPermission from .forms import TagListForm, TagForm from .models import TagProperties from .permissions import (PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, PERMISSION_TAG_VIEW) +from .serializers import TagSerializer logger = logging.getLogger(__name__) @@ -370,3 +375,29 @@ def tag_acl_list(request, tag_pk): 'object': tag, } ) + + +# API views + + +class APITagView(generics.RetrieveAPIView): + """ + Details of the selected tag. + """ + serializer_class = TagSerializer + queryset = Tag.objects.all() + + permission_classes = (MayanPermission,) + mayan_object_permissions = [PERMISSION_TAG_VIEW] + + +class APITagListView(generics.ListAPIView): + """ + Returns a list of all the tags. + """ + + serializer_class = TagSerializer + queryset = Tag.objects.all() + + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = [PERMISSION_TAG_VIEW]