diff --git a/apps/ocr/exceptions.py b/apps/ocr/exceptions.py index 41ebe0c8ca..704e0ae9c7 100644 --- a/apps/ocr/exceptions.py +++ b/apps/ocr/exceptions.py @@ -11,3 +11,7 @@ class UnpaperError(Exception): Raised by unpaper """ pass + + +class ReQueueError(Exception): + pass diff --git a/apps/ocr/models.py b/apps/ocr/models.py index 6e25ef334f..f33ee3fb35 100644 --- a/apps/ocr/models.py +++ b/apps/ocr/models.py @@ -1,4 +1,5 @@ from ast import literal_eval +from datetime import datetime from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -14,8 +15,9 @@ from sources.managers import SourceTransformationManager from ocr.literals import DOCUMENTQUEUE_STATE_STOPPED, \ DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_CHOICES + QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING from ocr.managers import DocumentQueueManager +from ocr.exceptions import ReQueueError class DocumentQueue(models.Model): @@ -56,6 +58,17 @@ class QueueDocument(models.Model): def get_transformation_list(self): return QueueTransformation.transformations.get_for_object_as_list(self) + def requeue(self): + if self.state == QUEUEDOCUMENT_STATE_PROCESSING: + raise ReQueueError + else: + self.datetime_submitted = datetime.now() + self.state = QUEUEDOCUMENT_STATE_PENDING + self.delay = False + self.result = None + self.node_name = None + self.save() + def __unicode__(self): try: return unicode(self.document) diff --git a/apps/ocr/views.py b/apps/ocr/views.py index d6102f1200..8fbc40d444 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -1,4 +1,3 @@ -import datetime import socket from django.http import HttpResponseRedirect @@ -23,7 +22,7 @@ from ocr.models import DocumentQueue, QueueDocument, QueueTransformation from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED, \ DOCUMENTQUEUE_STATE_ACTIVE -from ocr.exceptions import AlreadyQueued +from ocr.exceptions import AlreadyQueued, ReQueueError from ocr.api import clean_pages from ocr.forms import QueueTransformationForm, QueueTransformationForm_create @@ -122,7 +121,7 @@ def submit_document_multiple(request): for item_id in request.GET.get('id_list', '').split(','): submit_document(request, item_id) - return HttpResponseRedirect(request.META['HTTP_REFERER']) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) def submit_document(request, document_id): @@ -130,7 +129,7 @@ def submit_document(request, document_id): document = get_object_or_404(Document, pk=document_id) return submit_document_to_queue(request, document=document, - post_submit_redirect=request.META['HTTP_REFERER']) + post_submit_redirect=request.META.get('HTTP_REFERER', '/')) def submit_document_to_queue(request, document, post_submit_redirect=None): @@ -167,22 +166,21 @@ def re_queue_document(request, queue_document_id=None, queue_document_id_list=No if request.method == 'POST': for queue_document in queue_documents: try: - queue_document.document - if queue_document.state == QUEUEDOCUMENT_STATE_PROCESSING: - messages.warning(request, _(u'Document: %s is already being processed and can\'t be re-queded.') % queue_document) - else: - queue_document.datetime_submitted = datetime.datetime.now() - queue_document.state = QUEUEDOCUMENT_STATE_PENDING - queue_document.delay = False - queue_document.result = None - queue_document.node_name = None - queue_document.save() - messages.success(request, _(u'Document: %(document)s was re-queued to the OCR queue: %(queue)s') % { - 'document': queue_document.document, 'queue': queue_document.document_queue.label}) + queue_document.requeue() + messages.success( + request, + _(u'Document: %(document)s was re-queued to the OCR queue: %(queue)s') % { + 'document': queue_document.document, + 'queue': queue_document.document_queue.label + } + ) except Document.DoesNotExist: messages.error(request, _(u'Document id#: %d, no longer exists.') % queue_document.document_id) - except Exception, e: - messages.error(request, e) + except ReQueueError: + messages.warning( + request, + _(u'Document: %s is already being processed and can\'t be re-queded.') % queue_document + ) return HttpResponseRedirect(next) context = {