Add tag app API endpoints

This commit is contained in:
Roberto Rosario
2014-07-09 19:12:12 -04:00
parent db15e0f85d
commit 6eada315ce
4 changed files with 61 additions and 4 deletions

View File

@@ -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.'))

View File

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

View File

@@ -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<tag_pk>\d+)/acl/list/$', 'tag_acl_list', (), 'tag_acl_list'),
)
api_urls = patterns('',
url(r'^tags/(?P<pk>[0-9]+)/$', APITagView.as_view(), name='tag-detail'),
url(r'^tags/$', APITagListView.as_view(), name='tag-list'),
)

View File

@@ -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]