Don't allow duplicate documents in queues

This commit is contained in:
Roberto Rosario
2011-03-11 01:01:56 -04:00
parent 6bef320142
commit 0a91b7ff7d
6 changed files with 51 additions and 25 deletions

View File

@@ -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
View File

@@ -0,0 +1,2 @@
class AlreadyQueued(Exception):
pass

View File

@@ -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'))

View File

@@ -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):

View File

@@ -1,3 +1,6 @@
2011-Mar-11
* Don't allow duplicate documents in queues
2011-Mar-10
* Added new setting: side bar search box

View File

@@ -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)