diff --git a/HISTORY.rst b/HISTORY.rst index 40be54b214..043a8f818c 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,6 +7,7 @@ * Update jQuery to version 3.4.1 * Add support for deleting the OCR content of a document or selection of documents. +* Add OCR content deleted event. 3.2.7 (2019-08-28) ================== diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index e79c90c898..e59f3cd90c 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -14,9 +14,14 @@ from mayan.apps.common.menus import ( ) from mayan.apps.documents.search import document_search, document_page_search from mayan.apps.documents.signals import post_version_upload +from mayan.apps.events.classes import ModelEventType from mayan.apps.navigation.classes import SourceColumn from .dependencies import * # NOQA +from .events import ( + event_ocr_document_content_deleted, event_ocr_document_version_finish, + event_ocr_document_version_submit +) from .handlers import ( handler_index_document, handler_initialize_new_ocr_settings, handler_ocr_document_version, @@ -83,6 +88,14 @@ class OCRApp(MayanAppConfig): name='submit_for_ocr', value=method_document_version_ocr_submit ) + ModelEventType.register( + model=Document, event_types=( + event_ocr_document_content_deleted, + event_ocr_document_version_finish, + event_ocr_document_version_submit + ) + ) + ModelField( model=Document, name='versions__pages__ocr_content__content' ) diff --git a/mayan/apps/ocr/events.py b/mayan/apps/ocr/events.py index 512c96763d..c47fdaa0dc 100644 --- a/mayan/apps/ocr/events.py +++ b/mayan/apps/ocr/events.py @@ -6,6 +6,10 @@ from mayan.apps.events.classes import EventTypeNamespace namespace = EventTypeNamespace(label=_('OCR'), name='ocr') +event_ocr_document_content_deleted = namespace.add_event_type( + label=_('Document OCR content deleted'), + name='document_content_deleted' +) event_ocr_document_version_submit = namespace.add_event_type( label=_('Document version submitted for OCR'), name='document_version_submit' diff --git a/mayan/apps/ocr/managers.py b/mayan/apps/ocr/managers.py index 9dac566824..db0e4ffb26 100644 --- a/mayan/apps/ocr/managers.py +++ b/mayan/apps/ocr/managers.py @@ -12,7 +12,9 @@ from mayan.apps.documents.storages import storage_documentimagecache from mayan.apps.documents.literals import DOCUMENT_IMAGE_TASK_TIMEOUT from mayan.apps.documents.tasks import task_generate_document_page_image -from .events import event_ocr_document_version_finish +from .events import ( + event_ocr_document_content_deleted, event_ocr_document_version_finish +) from .runtime import ocr_backend from .signals import post_document_version_ocr @@ -20,11 +22,15 @@ logger = logging.getLogger(__name__) class DocumentPageOCRContentManager(models.Manager): - def delete_ocr_content_for(self, document): + def delete_ocr_content_for(self, document, user=None): with transaction.atomic(): for document_page in document.pages.all(): self.filter(document_page=document_page).delete() + event_ocr_document_content_deleted.commit( + actor=user, target=document + ) + def process_document_page(self, document_page): logger.info( 'Processing page: %d of document version: %s', diff --git a/mayan/apps/ocr/tests/test_events.py b/mayan/apps/ocr/tests/test_events.py index 231182dcb1..0310475069 100644 --- a/mayan/apps/ocr/tests/test_events.py +++ b/mayan/apps/ocr/tests/test_events.py @@ -5,11 +5,29 @@ from actstream.models import Action from mayan.apps.documents.tests.test_models import GenericDocumentTestCase from ..events import ( - event_ocr_document_version_submit, event_ocr_document_version_finish + event_ocr_document_content_deleted, event_ocr_document_version_submit, + event_ocr_document_version_finish ) +from ..models import DocumentPageOCRContent class OCREventsTestCase(GenericDocumentTestCase): + def test_document_content_deleted_event(self): + Action.objects.all().delete() + DocumentPageOCRContent.objects.delete_ocr_content_for( + document=self.test_document + ) + + # Get the oldest action + action = Action.objects.order_by('-timestamp').last() + + self.assertEqual( + action.target, self.test_document + ) + self.assertEqual( + action.verb, event_ocr_document_content_deleted.id + ) + def test_document_version_submit_event(self): Action.objects.all().delete() self.test_document.submit_for_ocr() diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py index cf89f22c70..0de2556510 100644 --- a/mayan/apps/ocr/views.py +++ b/mayan/apps/ocr/views.py @@ -47,7 +47,7 @@ class DocumentOCRContentDeleteView(MultipleObjectConfirmActionView): def object_action(self, form, instance): DocumentPageOCRContent.objects.delete_ocr_content_for( - document=instance + document=instance, user=self.request.user )