diff --git a/mayan/apps/ocr/__init__.py b/mayan/apps/ocr/__init__.py index 5889a21659..63d6151ea7 100644 --- a/mayan/apps/ocr/__init__.py +++ b/mayan/apps/ocr/__init__.py @@ -14,6 +14,7 @@ from main.api import register_maintenance_links from navigation.api import register_links from navigation.links import link_spacer from project_tools.api import register_tool +from rest_api.classes import APIEndPoint from .links import (all_document_ocr_cleanup, ocr_tool_link, queue_document_list, queue_document_multiple_delete, @@ -56,3 +57,5 @@ Document.add_to_class('submit_for_ocr', document_ocr_submit) class_permissions(Document, [PERMISSION_OCR_DOCUMENT]) register_tool(ocr_tool_link) + +APIEndPoint('ocr') diff --git a/mayan/apps/ocr/api_views.py b/mayan/apps/ocr/api_views.py new file mode 100644 index 0000000000..5f53536f99 --- /dev/null +++ b/mayan/apps/ocr/api_views.py @@ -0,0 +1,50 @@ +from __future__ import absolute_import + +from django.core.exceptions import PermissionDenied +from django.shortcuts import get_object_or_404 + +from rest_framework import generics, status +from rest_framework.response import Response +from rest_framework.settings import api_settings + +from acls.models import AccessEntry +from documents.models import Document +from permissions.models import Permission +from rest_api.filters import MayanObjectPermissionsFilter +from rest_api.permissions import MayanPermission + +from .permissions import PERMISSION_OCR_DOCUMENT +from .serializers import DocumentOCRSerializer + + +class DocumentOCRView(generics.GenericAPIView): + serializer_class = DocumentOCRSerializer + + permission_classes = (MayanPermission,) + + def post(self, request, *args, **kwargs): + """Submit document OCR queue.""" + + serializer = self.get_serializer(data=request.DATA, files=request.FILES) + + if serializer.is_valid(): + document = get_object_or_404(Document, pk=serializer.data['document_id']) + + try: + Permission.objects.check_permissions(request.user, [PERMISSION_OCR_DOCUMENT]) + except PermissionDenied: + AccessEntry.objects.check_access(PERMISSION_OCR_DOCUMENT, request.user, document) + + document.submit_for_ocr() + + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_202_ACCEPTED, + headers=headers) + + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + def get_success_headers(self, data): + try: + return {'Location': data[api_settings.URL_FIELD_NAME]} + except (TypeError, KeyError): + return {} diff --git a/mayan/apps/ocr/serializers.py b/mayan/apps/ocr/serializers.py new file mode 100644 index 0000000000..1062adb850 --- /dev/null +++ b/mayan/apps/ocr/serializers.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import + +from rest_framework import serializers + +from .models import Document + + +class DocumentOCRSerializer(serializers.Serializer): + document_id = serializers.IntegerField() diff --git a/mayan/apps/ocr/urls.py b/mayan/apps/ocr/urls.py index cee451cbd8..4b4f5b8436 100644 --- a/mayan/apps/ocr/urls.py +++ b/mayan/apps/ocr/urls.py @@ -1,5 +1,7 @@ from django.conf.urls import patterns, url +from .api_views import DocumentOCRView + urlpatterns = patterns('ocr.views', url(r'^document/(?P\d+)/submit/$', 'submit_document', (), 'submit_document'), url(r'^document/multiple/submit/$', 'submit_document_multiple', (), 'submit_document_multiple'), @@ -9,4 +11,9 @@ urlpatterns = patterns('ocr.views', url(r'^queue/document/(?P\d+)/re-queue/$', 're_queue_document', (), 're_queue_document'), url(r'^queue/document/multiple/re-queue/$', 're_queue_multiple_document', (), 're_queue_multiple_document'), - url(r'^document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'),) + url(r'^document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'), +) + +api_urls = patterns('', + url(r'^submit/$', DocumentOCRView.as_view(), name='document-ocr-submit-view'), +)