From 2396d7dae99ee43acb962bbb7dffc0a632b46977 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 8 Jul 2014 18:52:35 -0400 Subject: [PATCH] Update the documents app to use the new way of registering API endpoints --- mayan/apps/documents/__init__.py | 7 +++++++ mayan/apps/documents/api.py | 33 +++++++++++++++++++++++++++---- mayan/apps/documents/registry.py | 7 ------- mayan/apps/documents/resources.py | 10 +++++----- mayan/apps/documents/urls.py | 10 +++++++++- 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/mayan/apps/documents/__init__.py b/mayan/apps/documents/__init__.py index bc5822b6c2..730fbb688b 100644 --- a/mayan/apps/documents/__init__.py +++ b/mayan/apps/documents/__init__.py @@ -14,6 +14,7 @@ from navigation.api import (register_links, register_top_menu, register_model_list_columns, register_multi_item_links, register_sidebar_template) from project_setup.api import register_setup +from rest_api.classes import APIEndPoint from statistics.classes import StatisticNamespace from .conf import settings as document_settings @@ -46,6 +47,7 @@ from .permissions import ( PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_NEW_VERSION) from .statistics import DocumentStatistics, DocumentUsageStatistics +from .urls import api_urls from .widgets import document_thumbnail # History setup @@ -151,3 +153,8 @@ document_search.add_related_field('comments', 'Comment', 'comment', 'object_pk', namespace = StatisticNamespace(name='documents', label=_(u'Documents')) namespace.add_statistic(DocumentStatistics(name='document_stats', label=_(u'Document tendencies'))) namespace.add_statistic(DocumentUsageStatistics(name='document_usage', label=_(u'Document usage'))) + + +endpoint = APIEndPoint('documents') +endpoint.register_urls(api_urls) +endpoint.add_endpoint('document-list') diff --git a/mayan/apps/documents/api.py b/mayan/apps/documents/api.py index eccb7ff2f5..c3726cf683 100644 --- a/mayan/apps/documents/api.py +++ b/mayan/apps/documents/api.py @@ -17,32 +17,57 @@ from permissions.models import Permission from .conf.settings import DISPLAY_SIZE, ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL from .models import Document, DocumentVersion, DocumentPage from .permissions import PERMISSION_DOCUMENT_VIEW -from .resources import ResourceDocument, ResourceDocumentVersion, ResourceDocumentPage +from .resources import DocumentSerializer, DocumentVersionSerializer, DocumentPageSerializer logger = logging.getLogger(__name__) # API Views +class APIDocumentListView(generics.ListAPIView): + """ + Returns a list of all the documents. + """ + + serializer_class = DocumentSerializer + queryset = Document.objects.all() + + class APIDocumentPageView(generics.RetrieveAPIView): + """ + Returns the selected document page details. + """ + allowed_methods = ['GET'] - serializer_class = ResourceDocumentPage + serializer_class = DocumentPageSerializer queryset = DocumentPage.objects.all() class APIDocumentView(generics.RetrieveAPIView): + """ + Returns the selected document details. + """ + allowed_methods = ['GET'] - serializer_class = ResourceDocument + serializer_class = DocumentSerializer queryset = Document.objects.all() class APIDocumentVersionView(generics.RetrieveAPIView): + """ + Returns the selected document version details. + """ + allowed_methods = ['GET'] - serializer_class = ResourceDocumentVersion + serializer_class = DocumentVersionSerializer queryset = DocumentVersion.objects.all() class APIDocumentImageView(generics.GenericAPIView): + """ + Returns an image representation of the selected document. + """ + def get(self, request, pk): document = get_object_or_404(Document, pk=pk) diff --git a/mayan/apps/documents/registry.py b/mayan/apps/documents/registry.py index ee779b8922..2b7ea97e78 100644 --- a/mayan/apps/documents/registry.py +++ b/mayan/apps/documents/registry.py @@ -3,7 +3,6 @@ from __future__ import absolute_import from django.conf.urls import url from .cleanup import cleanup -from .api import APIDocumentView, APIDocumentVersionView, APIDocumentImageView, APIDocumentPageView bootstrap_models = [ { @@ -16,9 +15,3 @@ bootstrap_models = [ ] cleanup_functions = [cleanup] -version_0_api_services = [ - {'urlpattern': url(r'^document/(?P[0-9]+)/$', APIDocumentView.as_view(), name='document-detail'), 'description': 'Show document data', 'url': 'document/'}, - {'urlpattern': url(r'^document_version/(?P[0-9]+)/$', APIDocumentVersionView.as_view(), name='documentversion-detail'), 'description': '', 'url': 'document_version/'}, - {'urlpattern': url(r'^document_page/(?P[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'), 'description': '', 'url': 'document_page/'}, - {'urlpattern': url(r'^document/(?P[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'), 'description': 'Return a base64 image of the document', 'url': 'document//image/?page=&zoom=&rotate='}, -] diff --git a/mayan/apps/documents/resources.py b/mayan/apps/documents/resources.py index ca8e4defda..e8710a488b 100644 --- a/mayan/apps/documents/resources.py +++ b/mayan/apps/documents/resources.py @@ -7,20 +7,20 @@ from rest_framework import serializers from .models import Document, DocumentVersion, DocumentPage -class ResourceDocumentPage(serializers.HyperlinkedModelSerializer): +class DocumentPageSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = DocumentPage -class ResourceDocumentVersion(serializers.HyperlinkedModelSerializer): - pages = ResourceDocumentPage(many=True, read_only=True) +class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer): + pages = DocumentPageSerializer(many=True, read_only=True) class Meta: model = DocumentVersion -class ResourceDocument(serializers.HyperlinkedModelSerializer): - versions = ResourceDocumentVersion(many=True, read_only=True) +class DocumentSerializer(serializers.HyperlinkedModelSerializer): + versions = DocumentVersionSerializer(many=True, read_only=True) class Meta: model = Document diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 06aea0cf7d..9e0848f401 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -2,6 +2,7 @@ from __future__ import absolute_import from django.conf.urls import patterns, url +from .api import APIDocumentView, APIDocumentListView, APIDocumentVersionView, APIDocumentImageView, APIDocumentPageView from .conf.settings import (PREVIEW_SIZE, PRINT_SIZE, DISPLAY_SIZE, MULTIPAGE_PREVIEW_SIZE) @@ -67,5 +68,12 @@ urlpatterns = patterns('documents.views', url(r'^type/filename/(?P\d+)/edit/$', 'document_type_filename_edit', (), 'document_type_filename_edit'), url(r'^type/filename/(?P\d+)/delete/$', 'document_type_filename_delete', (), 'document_type_filename_delete'), url(r'^type/(?P\d+)/filename/create/$', 'document_type_filename_create', (), 'document_type_filename_create'), - +) + +api_urls = patterns('', + url(r'^documents/$', APIDocumentListView.as_view(), name='document-list'), + url(r'^documents/(?P[0-9]+)/$', APIDocumentView.as_view(), name='document-detail'), + url(r'^document_version/(?P[0-9]+)/$', APIDocumentVersionView.as_view(), name='documentversion-detail'), + url(r'^document_page/(?P[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'), + url(r'^documents/(?P[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'), )