diff --git a/mayan/apps/document_parsing/api_views.py b/mayan/apps/document_parsing/api_views.py index ea97b8b9ad..c56e09c6f8 100644 --- a/mayan/apps/document_parsing/api_views.py +++ b/mayan/apps/document_parsing/api_views.py @@ -17,7 +17,7 @@ class APIDocumentPageContentView(generics.RetrieveAPIView): """ Returns the content of the selected document page. """ - lookup_url_kwarg = 'page_pk' + lookup_url_kwarg = 'document_page_id' mayan_object_permissions = { 'GET': (permission_content_view,), } @@ -25,11 +25,12 @@ class APIDocumentPageContentView(generics.RetrieveAPIView): serializer_class = DocumentPageContentSerializer def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['document_pk']) + return get_object_or_404(klass=Document, pk=self.kwargs['document_id']) def get_document_version(self): return get_object_or_404( - klass=self.get_document().versions.all(), pk=self.kwargs['version_pk'] + klass=self.get_document().versions.all(), + pk=self.kwargs['document_version_id'] ) def get_queryset(self): diff --git a/mayan/apps/document_parsing/events.py b/mayan/apps/document_parsing/events.py index 84a9c86d6d..3700c44f05 100644 --- a/mayan/apps/document_parsing/events.py +++ b/mayan/apps/document_parsing/events.py @@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.events import EventTypeNamespace namespace = EventTypeNamespace( - name='document_parsing', label=_('Document parsing') + label=_('Document parsing'), name='document_parsing' ) event_parsing_document_version_submit = namespace.add_event_type( diff --git a/mayan/apps/document_parsing/exceptions.py b/mayan/apps/document_parsing/exceptions.py index ebc1b0d0ca..6798f85c5e 100644 --- a/mayan/apps/document_parsing/exceptions.py +++ b/mayan/apps/document_parsing/exceptions.py @@ -5,4 +5,3 @@ class ParserError(Exception): """ Base exception for file parsers """ - pass diff --git a/mayan/apps/document_parsing/links.py b/mayan/apps/document_parsing/links.py index a4e27960c8..ac2cf20d7b 100644 --- a/mayan/apps/document_parsing/links.py +++ b/mayan/apps/document_parsing/links.py @@ -16,22 +16,26 @@ from .permissions import ( ) link_document_content = Link( - args='resolved_object.id', icon_class=icon_document_content, + icon_class=icon_document_content, + kwargs={'document_id': 'resolved_object.id'}, permissions=(permission_content_view,), text=_('Content'), view='document_parsing:document_content', ) link_document_page_content = Link( - args='resolved_object.id', icon_class=icon_document_content, + icon_class=icon_document_content, + kwargs={'document_page_id': 'resolved_object.id'}, permissions=(permission_content_view,), text=_('Content'), view='document_parsing:document_page_content', ) link_document_parsing_errors_list = Link( - args='resolved_object.id', icon_class=icon_document_parsing_errors_list, + icon_class=icon_document_parsing_errors_list, + kwargs={'document_id': 'resolved_object.id'}, permissions=(permission_content_view,), text=_('Parsing errors'), view='document_parsing:document_parsing_error_list' ) link_document_content_download = Link( - args='resolved_object.id', icon_class=icon_document_content_download, + icon_class=icon_document_content_download, + kwargs={'document_id': 'resolved_object.id'}, permissions=(permission_content_view,), text=_('Download content'), view='document_parsing:document_content_download' ) @@ -40,13 +44,14 @@ link_document_multiple_submit = Link( view='document_parsing:document_multiple_submit' ) link_document_submit = Link( - args='resolved_object.id', icon_class=icon_document_submit, + icon_class=icon_document_submit, + kwargs={'document_id': 'resolved_object.id'}, permissions=(permission_parse_document,), text=_('Submit for parsing'), view='document_parsing:document_submit' ) link_document_type_parsing_settings = Link( - args='resolved_object.id', icon_class=icon_document_type_parsing_settings, + kwargs={'document_type_id': 'resolved_object.id'}, permissions=(permission_document_type_parsing_setup,), text=_('Setup parsing'), view='document_parsing:document_type_parsing_settings', diff --git a/mayan/apps/document_parsing/permissions.py b/mayan/apps/document_parsing/permissions.py index d06198a9b7..b38b9ac4ea 100644 --- a/mayan/apps/document_parsing/permissions.py +++ b/mayan/apps/document_parsing/permissions.py @@ -7,12 +7,12 @@ from mayan.apps.permissions import PermissionNamespace namespace = PermissionNamespace(label=_('Document parsing'), name='document_parsing') permission_content_view = namespace.add_permission( - name='content_view', label=_('View the content of a document') + label=_('View the content of a document'), name='content_view' ) permission_document_type_parsing_setup = namespace.add_permission( - name='document_type_setup', - label=_('Change document type parsing settings') + label=_('Change document type parsing settings'), + name='document_type_setup' ) permission_parse_document = namespace.add_permission( - name='parse_document', label=_('Parse the content of a document') + label=_('Parse the content of a document'), name='parse_document' ) diff --git a/mayan/apps/document_parsing/queues.py b/mayan/apps/document_parsing/queues.py index 8fa72c2cc4..f9a4c6cc85 100644 --- a/mayan/apps/document_parsing/queues.py +++ b/mayan/apps/document_parsing/queues.py @@ -4,8 +4,9 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.task_manager.classes import CeleryQueue -queue_ocr = CeleryQueue(name='parsing', label=_('Parsing')) +queue_ocr = CeleryQueue(label=_('Parsing'), name='parsing') + queue_ocr.add_task_type( - name='mayan.apps.document_parsing.tasks.task_parse_document_version', - label=_('Document version parsing') + label=_('Document version parsing'), + name='mayan.apps.document_parsing.tasks.task_parse_document_version' ) diff --git a/mayan/apps/document_parsing/settings.py b/mayan/apps/document_parsing/settings.py index fd920cafcc..cde88864a5 100644 --- a/mayan/apps/document_parsing/settings.py +++ b/mayan/apps/document_parsing/settings.py @@ -6,7 +6,7 @@ from mayan.apps.smart_settings import Namespace from .literals import DEFAULT_PDFTOTEXT_PATH -namespace = Namespace(name='document_parsing', label=_('Document parsing')) +namespace = Namespace(label=_('Document parsing'), name='document_parsing') setting_auto_parsing = namespace.add_setting( global_name='DOCUMENT_PARSING_AUTO_PARSING', default=True, @@ -21,5 +21,4 @@ setting_pdftotext_path = namespace.add_setting( 'File path to poppler\'s pdftotext program used to extract text ' 'from PDF files.' ), - is_path=True ) diff --git a/mayan/apps/document_parsing/tests/test_api.py b/mayan/apps/document_parsing/tests/test_api.py index e67f9e46d2..9294f1963c 100644 --- a/mayan/apps/document_parsing/tests/test_api.py +++ b/mayan/apps/document_parsing/tests/test_api.py @@ -16,17 +16,14 @@ TEST_DOCUMENT_CONTENT = 'Sample text' class DocumentParsingAPITestCase(DocumentTestMixin, BaseAPITestCase): test_document_filename = TEST_HYBRID_DOCUMENT - def setUp(self): - super(DocumentParsingAPITestCase, self).setUp() - self.login_user() - def _request_document_page_content_view(self): return self.get( viewname='rest_api:document-page-content-view', - args=( - self.document.pk, self.document.latest_version.pk, - self.document.latest_version.pages.first().pk, - ) + kargs={ + 'document_id': self.document.pk, + 'version_id': self.document.latest_version.pk, + 'page_id': self.document.latest_version.pages.first().pk + } ) def test_get_document_version_page_content_no_access(self): diff --git a/mayan/apps/document_parsing/tests/test_views.py b/mayan/apps/document_parsing/tests/test_views.py index a7bcb0a1c5..d7b5e629ca 100644 --- a/mayan/apps/document_parsing/tests/test_views.py +++ b/mayan/apps/document_parsing/tests/test_views.py @@ -22,19 +22,16 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase): # Ensure we use a PDF file test_document_filename = TEST_HYBRID_DOCUMENT - def setUp(self): - super(DocumentContentViewsTestCase, self).setUp() - self.login_user() - def _request_document_content_view(self): return self.get( - 'document_parsing:document_content', args=(self.document.pk,) + viewname='document_parsing:document_content', + kwargs={'document_id': self.document.pk} ) def test_document_content_view_no_permissions(self): response = self._request_document_content_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_content_view_with_access(self): self.grant_access( @@ -48,15 +45,15 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase): def _request_document_page_content_view(self): return self.get( - viewname='document_parsing:document_page_content', args=( - self.document.pages.first().pk, - ) + viewname='document_parsing:document_page_content', kwargs={ + 'document_page_id': self.document.pages.first().pk + } ) def test_document_page_content_view_no_permissions(self): response = self._request_document_page_content_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_page_content_view_with_access(self): self.grant_access( @@ -71,12 +68,12 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase): def _request_document_content_download_view(self): return self.get( viewname='document_parsing:document_content_download', - args=(self.document.pk,) + kwargs={'document_id': self.document.pk} ) def test_document_parsing_download_view_no_permission(self): response = self._request_document_content_download_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_download_view_with_access(self): self.expected_content_type = 'application/octet-stream; charset=utf-8' @@ -98,14 +95,10 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase): # Ensure we use a PDF file test_document_filename = TEST_HYBRID_DOCUMENT - def setUp(self): - super(DocumentTypeViewsTestCase, self).setUp() - self.login_user() - def _request_document_type_parsing_settings_view(self): return self.get( viewname='document_parsing:document_type_parsing_settings', - args=(self.document.document_type.pk,) + kwargs={'document_type_id': self.document.document_type.pk} ) def test_document_type_parsing_settings_view_no_permission(self): diff --git a/mayan/apps/document_parsing/urls.py b/mayan/apps/document_parsing/urls.py index ce121d9fa5..eb4c70988a 100644 --- a/mayan/apps/document_parsing/urls.py +++ b/mayan/apps/document_parsing/urls.py @@ -11,46 +11,50 @@ from .views import ( urlpatterns = [ url( - r'^documents/(?P\d+)/content/$', DocumentContentView.as_view(), - name='document_content' + regex=r'^documents/(?P\d+)/content/$', + name='document_content', view=DocumentContentView.as_view() ), url( - r'^documents/pages/(?P\d+)/content/$', - DocumentPageContentView.as_view(), name='document_page_content' + regex=r'^documents/pages/(?P\d+)/content/$', + name='document_page_content', view=DocumentPageContentView.as_view() ), url( - r'^documents/(?P\d+)/content/download/$', - DocumentContentDownloadView.as_view(), name='document_content_download' + regex=r'^documents/(?P\d+)/content/download/$', + name='document_content_download', + view=DocumentContentDownloadView.as_view() ), url( - r'^documents/(?P\d+)/submit/$', DocumentSubmitView.as_view(), - name='document_submit' + regex=r'^documents/(?P\d+)/submit/$', + name='document_submit', view=DocumentSubmitView.as_view() ), url( - r'^documents/multiple/submit/$', DocumentSubmitView.as_view(), - name='document_multiple_submit' + regex=r'^documents/multiple/submit/$', name='document_multiple_submit', + view=DocumentSubmitView.as_view() ), url( - r'^documents/(?P\d+)/errors/$', - DocumentParsingErrorsListView.as_view(), - name='document_parsing_error_list' + regex=r'^documents/(?P\d+)/errors/$', + name='document_parsing_error_list', + view=DocumentParsingErrorsListView.as_view() ), url( - r'^document_types/submit/$', DocumentTypeSubmitView.as_view(), - name='document_type_submit' + regex=r'^document_types/submit/$', name='document_type_submit', + view=DocumentTypeSubmitView.as_view() ), url( - r'^document_types/(?P\d+)/parsing/settings/$', - DocumentTypeSettingsEditView.as_view(), - name='document_type_parsing_settings' + regex=r'^document_types/(?P\d+)/parsing/settings/$', + name='document_type_parsing_settings', + view=DocumentTypeSettingsEditView.as_view() ), - url(r'^errors/all/$', ParseErrorListView.as_view(), name='error_list'), + url( + regex=r'^errors/all/$', name='error_list', + view=ParseErrorListView.as_view() + ) ] api_urls = [ url( - r'^documents/(?P\d+)/versions/(?P\d+)/pages/(?P\d+)/content/$', - APIDocumentPageContentView.as_view(), + regex=r'^documents/(?P\d+)/versions/(?P\d+)/pages/(?P\d+)/content/$', + view=APIDocumentPageContentView.as_view(), name='document-page-content-view' - ), + ) ] diff --git a/mayan/apps/document_parsing/views.py b/mayan/apps/document_parsing/views.py index df6af457b0..341b65ff87 100644 --- a/mayan/apps/document_parsing/views.py +++ b/mayan/apps/document_parsing/views.py @@ -28,6 +28,7 @@ class DocumentContentView(SingleObjectDetailView): form_class = DocumentContentForm model = Document object_permission = permission_content_view + pk_url_kwarg = 'document_id' def dispatch(self, request, *args, **kwargs): result = super(DocumentContentView, self).dispatch( @@ -48,6 +49,7 @@ class DocumentContentView(SingleObjectDetailView): class DocumentContentDownloadView(SingleObjectDownloadView): model = Document object_permission = permission_content_view + pk_url_kwarg = 'document_id' def get_file(self): file_object = DocumentContentDownloadView.TextIteratorIO( @@ -62,6 +64,7 @@ class DocumentPageContentView(SingleObjectDetailView): form_class = DocumentPageContentForm model = DocumentPage object_permission = permission_content_view + pk_url_kwarg = 'document_page_id' def dispatch(self, request, *args, **kwargs): result = super(DocumentPageContentView, self).dispatch( @@ -84,7 +87,7 @@ class DocumentParsingErrorsListView(SingleObjectListView): view_permission = permission_content_view def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) + return get_object_or_404(klass=Document, pk=self.kwargs['document_id']) def get_extra_context(self): return { @@ -141,10 +144,12 @@ class DocumentSubmitView(MultipleObjectConfirmActionView): class DocumentTypeSettingsEditView(SingleObjectEditView): fields = ('auto_parsing',) object_permission = permission_document_type_parsing_setup - post_action_redirect = reverse_lazy('documents:document_type_list') + post_action_redirect = reverse_lazy(viewname='documents:document_type_list') def get_document_type(self): - return get_object_or_404(klass=DocumentType, pk=self.kwargs['pk']) + return get_object_or_404( + klass=DocumentType, pk=self.kwargs['document_type_id'] + ) def get_extra_context(self): return { @@ -163,7 +168,7 @@ class DocumentTypeSubmitView(FormView): 'title': _('Submit all documents of a type for parsing') } form_class = DocumentTypeFilteredSelectForm - post_action_redirect = reverse_lazy('common:tools_list') + post_action_redirect = reverse_lazy(viewname='common:tools_list') def get_form_extra_kwargs(self): return {