Add link and view to show the content of parsed text for each document page.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-10-05 23:47:10 -04:00
parent 58fb762fac
commit 0f8825454d
7 changed files with 102 additions and 11 deletions

View File

@@ -7,6 +7,7 @@
* Remove newlines from the index name levels before using them as FUSE * Remove newlines from the index name levels before using them as FUSE
directories. directories.
* Fixed duplicated FUSE directory removal. * Fixed duplicated FUSE directory removal.
* Add link and view to show the parsed content of each document page.
3.1.4 (2018-10-4) 3.1.4 (2018-10-4)
================= =================

View File

@@ -29,10 +29,11 @@ from .handlers import (
handler_parse_document_version handler_parse_document_version
) )
from .links import ( from .links import (
link_document_content, link_document_content_download, link_document_content, link_document_page_content,
link_document_parsing_errors_list, link_document_submit_multiple, link_document_content_download, link_document_parsing_errors_list,
link_document_submit, link_document_type_parsing_settings, link_document_submit_multiple, link_document_submit,
link_document_type_submit, link_error_list link_document_type_parsing_settings, link_document_type_submit,
link_error_list
) )
from .permissions import ( from .permissions import (
permission_content_view, permission_document_type_parsing_setup, permission_content_view, permission_document_type_parsing_setup,
@@ -76,6 +77,9 @@ class DocumentParsingApp(MayanAppConfig):
Document = apps.get_model( Document = apps.get_model(
app_label='documents', model_name='Document' app_label='documents', model_name='Document'
) )
DocumentPage = apps.get_model(
app_label='documents', model_name='DocumentPage'
)
DocumentType = apps.get_model( DocumentType = apps.get_model(
app_label='documents', model_name='DocumentType' app_label='documents', model_name='DocumentType'
) )
@@ -154,6 +158,9 @@ class DocumentParsingApp(MayanAppConfig):
menu_facet.bind_links( menu_facet.bind_links(
links=(link_document_content,), sources=(Document,) links=(link_document_content,), sources=(Document,)
) )
menu_facet.bind_links(
links=(link_document_page_content,), sources=(DocumentPage,)
)
menu_multi_item.bind_links( menu_multi_item.bind_links(
links=(link_document_submit_multiple,), sources=(Document,) links=(link_document_submit_multiple,), sources=(Document,)
) )

View File

@@ -57,6 +57,33 @@ class DocumentContentForm(forms.Form):
) )
class DocumentPageContentForm(forms.Form):
contents = forms.CharField(
label=_('Contents'),
widget=TextAreaDiv(
attrs={
'class': 'text_area_div full-height',
'data-height-difference': 360
}
)
)
def __init__(self, *args, **kwargs):
document_page = kwargs.pop('instance', None)
super(DocumentPageContentForm, self).__init__(*args, **kwargs)
content = ''
self.fields['contents'].initial = ''
try:
page_content = document_page.content.content
except DocumentPageContent.DoesNotExist:
pass
else:
content = conditional_escape(force_text(page_content))
self.fields['contents'].initial = mark_safe(content)
class DocumentTypeSelectForm(forms.Form): class DocumentTypeSelectForm(forms.Form):
document_type = forms.ModelChoiceField( document_type = forms.ModelChoiceField(
queryset=DocumentType.objects.none(), label=('Document type') queryset=DocumentType.objects.none(), label=('Document type')

View File

@@ -19,6 +19,11 @@ link_document_content = Link(
permissions=(permission_content_view,), text=_('Content'), permissions=(permission_content_view,), text=_('Content'),
view='document_parsing:document_content', view='document_parsing:document_content',
) )
link_document_page_content = Link(
args='resolved_object.id', icon_class=icon_document_content,
permissions=(permission_content_view,), text=_('Content'),
view='document_parsing:document_page_content',
)
link_document_parsing_errors_list = Link( link_document_parsing_errors_list = Link(
args='resolved_object.id', icon_class=icon_document_parsing_errors_list, args='resolved_object.id', icon_class=icon_document_parsing_errors_list,
permissions=(permission_content_view,), text=_('Parsing errors'), permissions=(permission_content_view,), text=_('Parsing errors'),

View File

@@ -25,13 +25,13 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
super(DocumentContentViewsTestCase, self).setUp() super(DocumentContentViewsTestCase, self).setUp()
self.login_user() self.login_user()
def _document_content_view(self): def _request_document_content_view(self):
return self.get( return self.get(
'document_parsing:document_content', args=(self.document.pk,) 'document_parsing:document_content', args=(self.document.pk,)
) )
def test_document_content_view_no_permissions(self): def test_document_content_view_no_permissions(self):
response = self._document_content_view() response = self._request_document_content_view()
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
@@ -39,7 +39,29 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
self.grant_access( self.grant_access(
permission=permission_content_view, obj=self.document permission=permission_content_view, obj=self.document
) )
response = self._document_content_view() response = self._request_document_content_view()
self.assertContains(
response, 'Mayan EDMS Documentation', status_code=200
)
def _request_document_page_content_view(self):
return self.get(
'document_parsing:document_page_content', args=(
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)
def test_document_page_content_view_with_access(self):
self.grant_access(
permission=permission_content_view, obj=self.document
)
response = self._request_document_page_content_view()
self.assertContains( self.assertContains(
response, 'Mayan EDMS Documentation', status_code=200 response, 'Mayan EDMS Documentation', status_code=200

View File

@@ -5,8 +5,9 @@ from django.conf.urls import url
from .api_views import APIDocumentPageContentView from .api_views import APIDocumentPageContentView
from .views import ( from .views import (
DocumentContentView, DocumentContentDownloadView, DocumentContentView, DocumentContentDownloadView,
DocumentParsingErrorsListView, DocumentSubmitView, DocumentPageContentView, DocumentParsingErrorsListView,
DocumentTypeSettingsEditView, DocumentTypeSubmitView, ParseErrorListView DocumentSubmitView, DocumentTypeSettingsEditView, DocumentTypeSubmitView,
ParseErrorListView
) )
urlpatterns = [ urlpatterns = [
@@ -14,6 +15,10 @@ urlpatterns = [
r'^documents/(?P<pk>\d+)/content/$', DocumentContentView.as_view(), r'^documents/(?P<pk>\d+)/content/$', DocumentContentView.as_view(),
name='document_content' name='document_content'
), ),
url(
r'^documents/pages/(?P<pk>\d+)/content/$',
DocumentPageContentView.as_view(), name='document_page_content'
),
url( url(
r'^documents/(?P<pk>\d+)/content/download/$', r'^documents/(?P<pk>\d+)/content/download/$',
DocumentContentDownloadView.as_view(), name='document_content_download' DocumentContentDownloadView.as_view(), name='document_content_download'

View File

@@ -10,9 +10,11 @@ from common.generics import (
FormView, MultipleObjectConfirmActionView, SingleObjectDetailView, FormView, MultipleObjectConfirmActionView, SingleObjectDetailView,
SingleObjectDownloadView, SingleObjectEditView, SingleObjectListView SingleObjectDownloadView, SingleObjectEditView, SingleObjectListView
) )
from documents.models import Document, DocumentType from documents.models import Document, DocumentPage, DocumentType
from .forms import DocumentContentForm, DocumentTypeSelectForm from .forms import (
DocumentContentForm, DocumentPageContentForm, DocumentTypeSelectForm
)
from .models import DocumentVersionParseError from .models import DocumentVersionParseError
from .permissions import ( from .permissions import (
permission_content_view, permission_document_type_parsing_setup, permission_content_view, permission_document_type_parsing_setup,
@@ -55,6 +57,28 @@ class DocumentContentDownloadView(SingleObjectDownloadView):
) )
class DocumentPageContentView(SingleObjectDetailView):
form_class = DocumentPageContentForm
model = DocumentPage
object_permission = permission_content_view
def dispatch(self, request, *args, **kwargs):
result = super(DocumentPageContentView, self).dispatch(
request, *args, **kwargs
)
self.get_object().document.add_as_recent_document_for_user(
request.user
)
return result
def get_extra_context(self):
return {
'hide_labels': True,
'object': self.get_object(),
'title': _('Content for document page: %s') % self.get_object(),
}
class DocumentParsingErrorsListView(SingleObjectListView): class DocumentParsingErrorsListView(SingleObjectListView):
view_permission = permission_content_view view_permission = permission_content_view