Don't allow duplicate documents in queues
This commit is contained in:
@@ -22,9 +22,8 @@ from converter import TRANFORMATION_CHOICES
|
||||
from filetransfers.api import serve_file
|
||||
from filesystem_serving.api import document_create_fs_links, document_delete_fs_links
|
||||
from filesystem_serving.conf.settings import FILESERVING_ENABLE
|
||||
from ocr.models import add_document_to_queue
|
||||
from permissions.api import check_permissions
|
||||
|
||||
from ocr.views import submit_document_to_queue
|
||||
|
||||
from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD
|
||||
from documents.conf.settings import USE_STAGING_DIRECTORY
|
||||
@@ -107,9 +106,7 @@ def document_create_sibling(request, document_id, multiple=True):
|
||||
|
||||
def _handle_save_document(request, document, form=None):
|
||||
if AUTOMATIC_OCR:
|
||||
document_queue = add_document_to_queue(document)
|
||||
messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % {
|
||||
'document':document, 'queue':document_queue.label})
|
||||
submit_document_to_queue(request, document)
|
||||
|
||||
if form and 'document_type_available_filenames' in form.cleaned_data:
|
||||
if form.cleaned_data['document_type_available_filenames']:
|
||||
|
||||
2
apps/ocr/exceptions.py
Normal file
2
apps/ocr/exceptions.py
Normal file
@@ -0,0 +1,2 @@
|
||||
class AlreadyQueued(Exception):
|
||||
pass
|
||||
@@ -8,12 +8,21 @@ from documents.models import Document
|
||||
from literals import DOCUMENTQUEUE_STATE_STOPPED,\
|
||||
DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,\
|
||||
QUEUEDOCUMENT_STATE_CHOICES
|
||||
from exceptions import AlreadyQueued
|
||||
|
||||
|
||||
def add_document_to_queue(document, queue_name='default'):
|
||||
class DocumentQueueManager(models.Manager):
|
||||
def queue_document(self, document, queue_name='default'):
|
||||
print 'self', self
|
||||
print 'document', document
|
||||
print 'queue_name', queue_name
|
||||
document_queue = DocumentQueue.objects.get(name=queue_name)
|
||||
if QueueDocument.objects.filter(document_queue=document_queue, document=document).count():
|
||||
raise AlreadyQueued
|
||||
|
||||
queue_document = QueueDocument(document_queue=document_queue, document=document)
|
||||
queue_document.save()
|
||||
|
||||
return document_queue
|
||||
|
||||
|
||||
@@ -25,6 +34,8 @@ class DocumentQueue(models.Model):
|
||||
default=DOCUMENTQUEUE_STATE_STOPPED,
|
||||
verbose_name=_(u'state'))
|
||||
|
||||
objects = DocumentQueueManager()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _(u'document queue')
|
||||
verbose_name_plural = _(u'document queues')
|
||||
@@ -32,10 +43,6 @@ class DocumentQueue(models.Model):
|
||||
def __unicode__(self):
|
||||
return self.label
|
||||
|
||||
def add_document(self, document):
|
||||
queue_document = QueueDocument(document_queue=self, document=document)
|
||||
queue_document.save()
|
||||
|
||||
|
||||
class QueueDocument(models.Model):
|
||||
document_queue = models.ForeignKey(DocumentQueue, verbose_name=_(u'document queue'))
|
||||
|
||||
@@ -15,10 +15,11 @@ from documents.models import Document
|
||||
|
||||
from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, \
|
||||
PERMISSION_OCR_QUEUE_ENABLE_DISABLE
|
||||
from models import DocumentQueue, QueueDocument, add_document_to_queue
|
||||
from models import DocumentQueue, QueueDocument
|
||||
from literals import QUEUEDOCUMENT_STATE_PENDING, \
|
||||
QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR, \
|
||||
DOCUMENTQUEUE_STATE_STOPPED, DOCUMENTQUEUE_STATE_ACTIVE
|
||||
from exceptions import AlreadyQueued
|
||||
|
||||
|
||||
def queue_document_list(request, queue_name='default'):
|
||||
@@ -72,18 +73,29 @@ def queue_document_delete(request, queue_document_id):
|
||||
})
|
||||
|
||||
|
||||
|
||||
def submit_document(request, document_id, queue_name='default'):
|
||||
def submit_document(request, document_id):
|
||||
check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
|
||||
|
||||
document = get_object_or_404(Document, pk=document_id)
|
||||
return submit_document_to_queue(request, document=document,
|
||||
post_submit_redirect=request.META['HTTP_REFERER'])
|
||||
|
||||
document_queue = get_object_or_404(DocumentQueue, name=queue_name)
|
||||
add_document_to_queue(document, document_queue.name)
|
||||
|
||||
def submit_document_to_queue(request, document, post_submit_redirect=None):
|
||||
"""This view is meant to be reusable"""
|
||||
|
||||
try:
|
||||
document_queue = DocumentQueue.objects.queue_document(document)
|
||||
messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % {
|
||||
'document':document, 'queue':document_queue.label})
|
||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||
except AlreadyQueued:
|
||||
messages.warning(request, _(u'Document: %(document)s is already queued.') % {
|
||||
'document':document})
|
||||
except Exception, e:
|
||||
messages.error(request, e)
|
||||
|
||||
if post_submit_redirect:
|
||||
return HttpResponseRedirect(post_submit_redirect)
|
||||
|
||||
|
||||
def re_queue_document(request, queue_document_id):
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
2011-Mar-11
|
||||
* Don't allow duplicate documents in queues
|
||||
|
||||
2011-Mar-10
|
||||
* Added new setting: side bar search box
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ Main
|
||||
====
|
||||
* Diagnostics (document file <-> document db entry mismatches, orphan files)
|
||||
* Sidebar search - DONE
|
||||
* Convert home and about views to use generic_template
|
||||
|
||||
Common
|
||||
======
|
||||
@@ -63,6 +64,7 @@ Common
|
||||
* Default button linking to 'Enter' and ESC key for cancel
|
||||
* Dismiss all messages
|
||||
* Sidebar multi item action box
|
||||
* Show big icons in confirmation prompts (ie: document delete)
|
||||
|
||||
Permissions
|
||||
===========
|
||||
@@ -151,4 +153,7 @@ OCR
|
||||
* Allow for OCR document requeue on error and requeue limit
|
||||
* Multiple ocr queue support - STARTED
|
||||
* Add per node max ocr concurrent execution
|
||||
* Don't allow duplicate documents in queues - STARTED
|
||||
* OCR queue schedule support
|
||||
* Make automatic OCR a function of OCR app and not of Documents app (via signals)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user