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 filetransfers.api import serve_file
|
||||||
from filesystem_serving.api import document_create_fs_links, document_delete_fs_links
|
from filesystem_serving.api import document_create_fs_links, document_delete_fs_links
|
||||||
from filesystem_serving.conf.settings import FILESERVING_ENABLE
|
from filesystem_serving.conf.settings import FILESERVING_ENABLE
|
||||||
from ocr.models import add_document_to_queue
|
|
||||||
from permissions.api import check_permissions
|
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 DELETE_STAGING_FILE_AFTER_UPLOAD
|
||||||
from documents.conf.settings import USE_STAGING_DIRECTORY
|
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):
|
def _handle_save_document(request, document, form=None):
|
||||||
if AUTOMATIC_OCR:
|
if AUTOMATIC_OCR:
|
||||||
document_queue = add_document_to_queue(document)
|
submit_document_to_queue(request, document)
|
||||||
messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % {
|
|
||||||
'document':document, 'queue':document_queue.label})
|
|
||||||
|
|
||||||
if form and 'document_type_available_filenames' in form.cleaned_data:
|
if form and 'document_type_available_filenames' in form.cleaned_data:
|
||||||
if form.cleaned_data['document_type_available_filenames']:
|
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,\
|
from literals import DOCUMENTQUEUE_STATE_STOPPED,\
|
||||||
DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,\
|
DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,\
|
||||||
QUEUEDOCUMENT_STATE_CHOICES
|
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)
|
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 = QueueDocument(document_queue=document_queue, document=document)
|
||||||
queue_document.save()
|
queue_document.save()
|
||||||
|
|
||||||
return document_queue
|
return document_queue
|
||||||
|
|
||||||
|
|
||||||
@@ -25,6 +34,8 @@ class DocumentQueue(models.Model):
|
|||||||
default=DOCUMENTQUEUE_STATE_STOPPED,
|
default=DOCUMENTQUEUE_STATE_STOPPED,
|
||||||
verbose_name=_(u'state'))
|
verbose_name=_(u'state'))
|
||||||
|
|
||||||
|
objects = DocumentQueueManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'document queue')
|
verbose_name = _(u'document queue')
|
||||||
verbose_name_plural = _(u'document queues')
|
verbose_name_plural = _(u'document queues')
|
||||||
@@ -32,10 +43,6 @@ class DocumentQueue(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.label
|
return self.label
|
||||||
|
|
||||||
def add_document(self, document):
|
|
||||||
queue_document = QueueDocument(document_queue=self, document=document)
|
|
||||||
queue_document.save()
|
|
||||||
|
|
||||||
|
|
||||||
class QueueDocument(models.Model):
|
class QueueDocument(models.Model):
|
||||||
document_queue = models.ForeignKey(DocumentQueue, verbose_name=_(u'document queue'))
|
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, \
|
from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, \
|
||||||
PERMISSION_OCR_QUEUE_ENABLE_DISABLE
|
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, \
|
from literals import QUEUEDOCUMENT_STATE_PENDING, \
|
||||||
QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR, \
|
QUEUEDOCUMENT_STATE_PROCESSING, QUEUEDOCUMENT_STATE_ERROR, \
|
||||||
DOCUMENTQUEUE_STATE_STOPPED, DOCUMENTQUEUE_STATE_ACTIVE
|
DOCUMENTQUEUE_STATE_STOPPED, DOCUMENTQUEUE_STATE_ACTIVE
|
||||||
|
from exceptions import AlreadyQueued
|
||||||
|
|
||||||
|
|
||||||
def queue_document_list(request, queue_name='default'):
|
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):
|
||||||
def submit_document(request, document_id, queue_name='default'):
|
|
||||||
check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
|
check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
|
||||||
|
|
||||||
document = get_object_or_404(Document, pk=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'])
|
||||||
|
|
||||||
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.') % {
|
messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % {
|
||||||
'document':document, 'queue':document_queue.label})
|
'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):
|
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
|
2011-Mar-10
|
||||||
* Added new setting: side bar search box
|
* Added new setting: side bar search box
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ Main
|
|||||||
====
|
====
|
||||||
* Diagnostics (document file <-> document db entry mismatches, orphan files)
|
* Diagnostics (document file <-> document db entry mismatches, orphan files)
|
||||||
* Sidebar search - DONE
|
* Sidebar search - DONE
|
||||||
|
* Convert home and about views to use generic_template
|
||||||
|
|
||||||
Common
|
Common
|
||||||
======
|
======
|
||||||
@@ -63,6 +64,7 @@ Common
|
|||||||
* Default button linking to 'Enter' and ESC key for cancel
|
* Default button linking to 'Enter' and ESC key for cancel
|
||||||
* Dismiss all messages
|
* Dismiss all messages
|
||||||
* Sidebar multi item action box
|
* Sidebar multi item action box
|
||||||
|
* Show big icons in confirmation prompts (ie: document delete)
|
||||||
|
|
||||||
Permissions
|
Permissions
|
||||||
===========
|
===========
|
||||||
@@ -151,4 +153,7 @@ OCR
|
|||||||
* Allow for OCR document requeue on error and requeue limit
|
* Allow for OCR document requeue on error and requeue limit
|
||||||
* Multiple ocr queue support - STARTED
|
* Multiple ocr queue support - STARTED
|
||||||
* Add per node max ocr concurrent execution
|
* 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