From e703d2df1051623904a82e0cca359c86c9fd8015 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 3 Nov 2019 23:38:05 -0400 Subject: [PATCH] Split duplicated document views Signed-off-by: Roberto Rosario --- mayan/apps/documents/urls.py | 26 ++--- mayan/apps/documents/views/__init__.py | 1 + mayan/apps/documents/views/document_views.py | 81 ++-------------- .../views/duplicated_document_views.py | 94 +++++++++++++++++++ 4 files changed, 116 insertions(+), 86 deletions(-) create mode 100644 mayan/apps/documents/views/duplicated_document_views.py diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 84aec25094..d78a79905b 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -12,14 +12,6 @@ from .api_views import ( APIDocumentVersionPageListView, APIDocumentVersionView, APIRecentDocumentListView ) -from .views.document_views import ( - DocumentDocumentTypeEditView, DocumentDownloadFormView, - DocumentDownloadView, DocumentDuplicatesListView, DocumentEditView, - DocumentListView, DocumentPreviewView, DocumentPrint, - DocumentTransformationsClearView, DocumentTransformationsCloneView, - DocumentUpdatePageCountView, DocumentView, DuplicatedDocumentListView, - RecentAccessDocumentListView, RecentAddedDocumentListView -) from .views.document_page_views import ( DocumentPageDisable, DocumentPageEnable, DocumentPageListView, DocumentPageNavigationFirst, DocumentPageNavigationLast, @@ -28,10 +20,6 @@ from .views.document_page_views import ( DocumentPageView, DocumentPageViewResetView, DocumentPageZoomInView, DocumentPageZoomOutView ) -from .views.document_version_views import ( - DocumentVersionDownloadFormView, DocumentVersionDownloadView, - DocumentVersionListView, DocumentVersionRevertView, DocumentVersionView, -) from .views.document_type_views import ( DocumentTypeCreateView, DocumentTypeDeleteView, DocumentTypeDeletionPoliciesEditView, DocumentTypeDocumentListView, @@ -39,6 +27,20 @@ from .views.document_type_views import ( DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, DocumentTypeFilenameListView, DocumentTypeListView ) +from .views.document_version_views import ( + DocumentVersionDownloadFormView, DocumentVersionDownloadView, + DocumentVersionListView, DocumentVersionRevertView, DocumentVersionView, +) +from .views.document_views import ( + DocumentDocumentTypeEditView, DocumentDownloadFormView, + DocumentDownloadView, DocumentEditView, DocumentListView, + DocumentPreviewView, DocumentPrint, DocumentTransformationsClearView, + DocumentTransformationsCloneView, DocumentUpdatePageCountView, + DocumentView, RecentAccessDocumentListView, RecentAddedDocumentListView +) +from .views.duplicated_document_views import ( + DocumentDuplicatesListView, DuplicatedDocumentListView +) from .views.favorite_document_views import ( FavoriteAddView, FavoriteDocumentListView, FavoriteRemoveView ) diff --git a/mayan/apps/documents/views/__init__.py b/mayan/apps/documents/views/__init__.py index 0183a3a642..e3cf842816 100644 --- a/mayan/apps/documents/views/__init__.py +++ b/mayan/apps/documents/views/__init__.py @@ -2,6 +2,7 @@ from .document_page_views import * # NOQA from .document_type_views import * # NOQA from .document_version_views import * # NOQA from .document_views import * # NOQA +from .duplicated_document_views import * # NOQA from .favorite_document_views import * # NOQA from .misc_views import * # NOQA from .trashed_document_views import * # NOQA diff --git a/mayan/apps/documents/views/document_views.py b/mayan/apps/documents/views/document_views.py index 566077c99c..8745ee5d50 100644 --- a/mayan/apps/documents/views/document_views.py +++ b/mayan/apps/documents/views/document_views.py @@ -32,10 +32,10 @@ from ..forms import ( ) from ..icons import ( icon_document_list, icon_document_list_recent_access, - icon_recent_added_document_list, icon_duplicated_document_list + icon_recent_added_document_list ) from ..literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME -from ..models import Document, DuplicatedDocument, RecentDocument +from ..models import Document, RecentDocument from ..permissions import ( permission_document_download, permission_document_print, permission_document_properties_edit, permission_document_tools, @@ -48,12 +48,11 @@ from ..tasks import task_update_page_count from ..utils import parse_range __all__ = ( - 'DocumentListView', 'DocumentDocumentTypeEditView', - 'DocumentDuplicatesListView', 'DocumentEditView', 'DocumentPreviewView', - 'DocumentView', 'DocumentDownloadFormView', 'DocumentDownloadView', - 'DocumentUpdatePageCountView', 'DocumentTransformationsClearView', - 'DocumentTransformationsCloneView', 'DocumentPrint', - 'DuplicatedDocumentListView', 'RecentAccessDocumentListView', + 'DocumentListView', 'DocumentDocumentTypeEditView', 'DocumentEditView', + 'DocumentPreviewView', 'DocumentView', 'DocumentDownloadFormView', + 'DocumentDownloadView', 'DocumentUpdatePageCountView', + 'DocumentTransformationsClearView', 'DocumentTransformationsCloneView', + 'DocumentPrint', 'RecentAccessDocumentListView', 'RecentAddedDocumentListView' ) logger = logging.getLogger(__name__) @@ -322,47 +321,6 @@ class DocumentDownloadView(SingleObjectDownloadView): return item.label -class DocumentDuplicatesListView(DocumentListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - obj=self.get_document(), permissions=(permission_document_view,), - user=self.request.user - ) - - return super( - DocumentDuplicatesListView, self - ).dispatch(request, *args, **kwargs) - - def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) - - def get_extra_context(self): - context = super(DocumentDuplicatesListView, self).get_extra_context() - context.update( - { - 'no_results_icon': icon_duplicated_document_list, - 'no_results_text': _( - 'Only exact copies of this document will be shown in the ' - 'this list.' - ), - 'no_results_title': _( - 'There are no duplicates for this document' - ), - 'object': self.get_document(), - 'title': _('Duplicates for document: %s') % self.get_document(), - } - ) - return context - - def get_source_queryset(self): - try: - return DuplicatedDocument.objects.get( - document=self.get_document() - ).documents.all() - except DuplicatedDocument.DoesNotExist: - return Document.objects.none() - - class DocumentEditView(SingleObjectEditView): form_class = DocumentForm model = Document @@ -675,31 +633,6 @@ class DocumentPrint(FormView): return (self.template_name,) -class DuplicatedDocumentListView(DocumentListView): - def get_document_queryset(self): - return DuplicatedDocument.objects.get_duplicated_documents() - - def get_extra_context(self): - context = super(DuplicatedDocumentListView, self).get_extra_context() - context.update( - { - 'no_results_icon': icon_duplicated_document_list, - 'no_results_text': _( - 'Duplicates are documents that are composed of the exact ' - 'same file, down to the last byte. Files that have the ' - 'same text or OCR but are not identical or were saved ' - 'using a different file format will not appear as ' - 'duplicates.' - ), - 'no_results_title': _( - 'There are no duplicated documents' - ), - 'title': _('Duplicated documents') - } - ) - return context - - class RecentAccessDocumentListView(DocumentListView): def get_document_queryset(self): return RecentDocument.objects.get_for_user(user=self.request.user) diff --git a/mayan/apps/documents/views/duplicated_document_views.py b/mayan/apps/documents/views/duplicated_document_views.py new file mode 100644 index 0000000000..ac9acc5337 --- /dev/null +++ b/mayan/apps/documents/views/duplicated_document_views.py @@ -0,0 +1,94 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.conf import settings +from django.contrib import messages +from django.core.exceptions import PermissionDenied +from django.db import transaction +from django.http import HttpResponseRedirect +from django.shortcuts import get_object_or_404 +from django.urls import reverse +from django.utils.translation import ugettext_lazy as _, ungettext + +from mayan.apps.acls.models import AccessControlList +from mayan.apps.common.generics import ( + FormView, MultipleObjectConfirmActionView, MultipleObjectFormActionView, + SingleObjectDetailView, SingleObjectListView +) + +from ..events import event_document_view +from ..icons import icon_document_list, icon_duplicated_document_list +from ..models import Document, DuplicatedDocument +from ..permissions import permission_document_view + +from .document_views import DocumentListView + +__all__ = ('DocumentDuplicatesListView', 'DuplicatedDocumentListView') +logger = logging.getLogger(__name__) + + +class DocumentDuplicatesListView(DocumentListView): + def dispatch(self, request, *args, **kwargs): + AccessControlList.objects.check_access( + obj=self.get_document(), permissions=(permission_document_view,), + user=self.request.user + ) + + return super( + DocumentDuplicatesListView, self + ).dispatch(request, *args, **kwargs) + + def get_document(self): + return get_object_or_404(klass=Document, pk=self.kwargs['pk']) + + def get_extra_context(self): + context = super(DocumentDuplicatesListView, self).get_extra_context() + context.update( + { + 'no_results_icon': icon_duplicated_document_list, + 'no_results_text': _( + 'Only exact copies of this document will be shown in the ' + 'this list.' + ), + 'no_results_title': _( + 'There are no duplicates for this document' + ), + 'object': self.get_document(), + 'title': _('Duplicates for document: %s') % self.get_document(), + } + ) + return context + + def get_source_queryset(self): + try: + return DuplicatedDocument.objects.get( + document=self.get_document() + ).documents.all() + except DuplicatedDocument.DoesNotExist: + return Document.objects.none() + + +class DuplicatedDocumentListView(DocumentListView): + def get_document_queryset(self): + return DuplicatedDocument.objects.get_duplicated_documents() + + def get_extra_context(self): + context = super(DuplicatedDocumentListView, self).get_extra_context() + context.update( + { + 'no_results_icon': icon_duplicated_document_list, + 'no_results_text': _( + 'Duplicates are documents that are composed of the exact ' + 'same file, down to the last byte. Files that have the ' + 'same text or OCR but are not identical or were saved ' + 'using a different file format will not appear as ' + 'duplicates.' + ), + 'no_results_title': _( + 'There are no duplicated documents' + ), + 'title': _('Duplicated documents') + } + ) + return context