From f29aeabcfb307be2ef72dc51ff41b32e42d55e4a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 21 Sep 2014 19:24:00 -0400 Subject: [PATCH] Add folder app API endpoint --- mayan/apps/folders/__init__.py | 8 ++++++ mayan/apps/folders/api_views.py | 43 +++++++++++++++++++++++++++++++ mayan/apps/folders/serializers.py | 11 ++++++++ mayan/apps/folders/urls.py | 7 +++++ 4 files changed, 69 insertions(+) create mode 100644 mayan/apps/folders/api_views.py create mode 100644 mayan/apps/folders/serializers.py diff --git a/mayan/apps/folders/__init__.py b/mayan/apps/folders/__init__.py index 3aa57639d0..0ada1ae8d7 100644 --- a/mayan/apps/folders/__init__.py +++ b/mayan/apps/folders/__init__.py @@ -1,10 +1,13 @@ from __future__ import absolute_import +from django.utils.translation import ugettext_lazy as _ + from acls.api import class_permissions from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from documents.models import Document from navigation.api import (register_links, register_top_menu, register_multi_item_links, register_sidebar_template) +from rest_api.classes import APIEndPoint from .links import (folder_list, folder_create, folder_edit, folder_delete, folder_document_multiple_remove, folder_view, folder_add_document, @@ -14,6 +17,7 @@ from .models import Folder from .permissions import (PERMISSION_FOLDER_EDIT, PERMISSION_FOLDER_DELETE, PERMISSION_FOLDER_REMOVE_DOCUMENT, PERMISSION_FOLDER_VIEW, PERMISSION_FOLDER_ADD_DOCUMENT) +from .urls import api_urls register_multi_item_links(['folder_view'], [folder_document_multiple_remove]) @@ -43,3 +47,7 @@ class_permissions(Document, [ PERMISSION_FOLDER_ADD_DOCUMENT, PERMISSION_FOLDER_REMOVE_DOCUMENT, ]) + +endpoint = APIEndPoint('folders') +endpoint.register_urls(api_urls) +endpoint.add_endpoint('folder-list', _(u'Returns a list of all the folders.')) diff --git a/mayan/apps/folders/api_views.py b/mayan/apps/folders/api_views.py new file mode 100644 index 0000000000..ee7b8b0610 --- /dev/null +++ b/mayan/apps/folders/api_views.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import + +from rest_framework import generics + +from rest_api.filters import MayanObjectPermissionsFilter +from rest_api.permissions import MayanPermission + +from .models import Folder +from .permissions import (PERMISSION_FOLDER_CREATE, + PERMISSION_FOLDER_DELETE, PERMISSION_FOLDER_EDIT, + PERMISSION_FOLDER_VIEW) +from .serializers import FolderSerializer + + +class APIFolderListView(generics.ListCreateAPIView): + """ + Returns a list of all the folders. + """ + + serializer_class = FolderSerializer + queryset = Folder.objects.all() + + permission_classes = (MayanPermission,) + filter_backends = (MayanObjectPermissionsFilter,) + mayan_object_permissions = {'GET': [PERMISSION_FOLDER_VIEW]} + mayan_view_permissions = {'POST': [PERMISSION_FOLDER_CREATE]} + + +class APIFolderView(generics.RetrieveUpdateDestroyAPIView): + """ + Returns the selected folder details. + """ + + serializer_class = FolderSerializer + queryset = Folder.objects.all() + + permission_classes = (MayanPermission,) + mayan_object_permissions = { + 'GET': [PERMISSION_FOLDER_VIEW], + 'PUT': [PERMISSION_FOLDER_EDIT], + 'PATCH': [PERMISSION_FOLDER_EDIT], + 'DELETE': [PERMISSION_FOLDER_DELETE] + } diff --git a/mayan/apps/folders/serializers.py b/mayan/apps/folders/serializers.py new file mode 100644 index 0000000000..f574de5906 --- /dev/null +++ b/mayan/apps/folders/serializers.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import + +from rest_framework import serializers + +from .models import Folder + + +class FolderSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + fields = ('id', 'url', 'title', 'user', 'datetime_created') + model = Folder diff --git a/mayan/apps/folders/urls.py b/mayan/apps/folders/urls.py index 1fcd128534..dfb7a05161 100644 --- a/mayan/apps/folders/urls.py +++ b/mayan/apps/folders/urls.py @@ -1,5 +1,7 @@ from django.conf.urls import patterns, url +from .api_views import APIFolderListView, APIFolderView + urlpatterns = patterns('folders.views', url(r'^list/$', 'folder_list', (), 'folder_list'), url(r'^create/$', 'folder_create', (), 'folder_create'), @@ -14,3 +16,8 @@ urlpatterns = patterns('folders.views', url(r'^(?P\d+)/acl/list/$', 'folder_acl_list', (), 'folder_acl_list'), ) + +api_urls = patterns('', + url(r'^folders/$', APIFolderListView.as_view(), name='folder-list'), + url(r'^folders/(?P[0-9]+)/$', APIFolderView.as_view(), name='folder-detail'), +)