Instead of the document content view, the document type parsing setup permissions is now required to view the parsing error list. The document type parsing setup permission can now be granted for individual document types.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -121,6 +121,10 @@
|
||||
- Add support for blocking the changing of password for specify users.
|
||||
- Add support for changing the HOME_VIEW, LOGIN_URL and LOGIN_REDIRECT_URL
|
||||
from the settings view.
|
||||
- Instead of the document content view, the document type parsing setup
|
||||
permissions is now required to view the parsing error list.
|
||||
- The document type parsing setup permission can now be granted for
|
||||
individual document types.
|
||||
|
||||
3.0.3 (2018-08-17)
|
||||
==================
|
||||
|
||||
@@ -76,11 +76,15 @@ class DocumentParsingApp(MayanAppConfig):
|
||||
DocumentType = apps.get_model(
|
||||
app_label='documents', model_name='DocumentType'
|
||||
)
|
||||
DocumentTypeSettings = self.get_model(
|
||||
model_name='DocumentTypeSettings'
|
||||
)
|
||||
DocumentVersion = apps.get_model(
|
||||
app_label='documents', model_name='DocumentVersion'
|
||||
)
|
||||
|
||||
DocumentVersionParseError = self.get_model('DocumentVersionParseError')
|
||||
DocumentVersionParseError = self.get_model(
|
||||
model_name='DocumentVersionParseError'
|
||||
)
|
||||
|
||||
Document.add_to_class('submit_for_parsing', document_parsing_submit)
|
||||
Document.add_to_class(
|
||||
@@ -103,7 +107,9 @@ class DocumentParsingApp(MayanAppConfig):
|
||||
permission_document_type_parsing_setup,
|
||||
)
|
||||
)
|
||||
|
||||
ModelPermission.register_inheritance(
|
||||
model=DocumentTypeSettings, related='document_type',
|
||||
)
|
||||
SourceColumn(
|
||||
source=DocumentVersionParseError, label=_('Document'),
|
||||
func=lambda context: document_link(context['object'].document_version.document)
|
||||
|
||||
@@ -7,7 +7,9 @@ from documents.tests import (
|
||||
TEST_DOCUMENT_PATH
|
||||
)
|
||||
|
||||
from ..permissions import permission_content_view
|
||||
from ..permissions import (
|
||||
permission_content_view, permission_document_type_parsing_setup
|
||||
)
|
||||
from ..utils import get_document_content
|
||||
|
||||
|
||||
@@ -33,28 +35,32 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_document_content_view_with_permission(self):
|
||||
self.grant_permission(permission=permission_content_view)
|
||||
def test_document_content_view_with_access(self):
|
||||
self.grant_access(
|
||||
permission=permission_content_view, obj=self.document
|
||||
)
|
||||
response = self._document_content_view()
|
||||
|
||||
self.assertContains(
|
||||
response, 'Mayan EDMS Documentation', status_code=200
|
||||
)
|
||||
|
||||
def test_document_parsing_download_view_no_permission(self):
|
||||
response = self.get(
|
||||
'document_parsing:document_content_download', args=(self.document.pk,)
|
||||
def _request_document_content_download_view(self):
|
||||
return self.get(
|
||||
viewname='document_parsing:document_content_download',
|
||||
args=(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)
|
||||
|
||||
def test_download_view_with_permission(self):
|
||||
def test_download_view_with_access(self):
|
||||
self.expected_content_type = 'application/octet-stream; charset=utf-8'
|
||||
|
||||
self.grant_permission(permission=permission_content_view)
|
||||
response = self.get(
|
||||
'document_parsing:document_content_download', args=(self.document.pk,)
|
||||
self.grant_access(
|
||||
permission=permission_content_view, obj=self.document
|
||||
)
|
||||
response = self._request_document_content_download_view()
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -63,3 +69,23 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
|
||||
''.join(get_document_content(document=self.document))
|
||||
),
|
||||
)
|
||||
|
||||
def test_document_type_parsing_settings_view_no_permission(self):
|
||||
response = self.get(
|
||||
viewname='document_parsing:document_type_parsing_settings',
|
||||
args=(self.document.document_type.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_document_type_parsing_settings_view_with_access(self):
|
||||
self.grant_access(
|
||||
permission=permission_document_type_parsing_setup,
|
||||
obj=self.document.document_type
|
||||
)
|
||||
response = self.get(
|
||||
viewname='document_parsing:document_type_parsing_settings',
|
||||
args=(self.document.document_type.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -3,7 +3,7 @@ from __future__ import absolute_import, unicode_literals
|
||||
from django.contrib import messages
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
||||
|
||||
from common.generics import (
|
||||
@@ -115,20 +115,23 @@ class DocumentSubmitView(MultipleObjectConfirmActionView):
|
||||
|
||||
class DocumentTypeSettingsEditView(SingleObjectEditView):
|
||||
fields = ('auto_parsing',)
|
||||
view_permission = permission_document_type_parsing_setup
|
||||
object_permission = permission_document_type_parsing_setup
|
||||
post_action_redirect = reverse_lazy('documents:document_type_list')
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
return get_object_or_404(
|
||||
DocumentType, pk=self.kwargs['pk']
|
||||
).parsing_settings
|
||||
def get_document_type(self):
|
||||
return get_object_or_404(DocumentType, pk=self.kwargs['pk'])
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object': self.get_document_type(),
|
||||
'title': _(
|
||||
'Edit parsing settings for document type: %s'
|
||||
) % self.get_object().document_type
|
||||
) % self.get_document_type()
|
||||
}
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
return self.get_document_type().parsing_settings
|
||||
|
||||
|
||||
class DocumentTypeSubmitView(FormView):
|
||||
form_class = DocumentTypeSelectForm
|
||||
@@ -136,14 +139,6 @@ class DocumentTypeSubmitView(FormView):
|
||||
'title': _('Submit all documents of a type for parsing')
|
||||
}
|
||||
|
||||
def get_form_extra_kwargs(self):
|
||||
return {
|
||||
'user': self.request.user
|
||||
}
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse('common:tools_list')
|
||||
|
||||
def form_valid(self, form):
|
||||
count = 0
|
||||
for document in form.cleaned_data['document_type'].documents.all():
|
||||
@@ -162,13 +157,21 @@ class DocumentTypeSubmitView(FormView):
|
||||
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
|
||||
def get_form_extra_kwargs(self):
|
||||
return {
|
||||
'user': self.request.user
|
||||
}
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse('common:tools_list')
|
||||
|
||||
|
||||
class ParseErrorListView(SingleObjectListView):
|
||||
extra_context = {
|
||||
'hide_object': True,
|
||||
'title': _('Parsing errors'),
|
||||
}
|
||||
view_permission = permission_content_view
|
||||
view_permission = permission_document_type_parsing_setup
|
||||
|
||||
def get_object_list(self):
|
||||
return DocumentVersionParseError.objects.all()
|
||||
|
||||
Reference in New Issue
Block a user