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:
@@ -7,6 +7,7 @@
|
||||
* Remove newlines from the index name levels before using them as FUSE
|
||||
directories.
|
||||
* Fixed duplicated FUSE directory removal.
|
||||
* Add link and view to show the parsed content of each document page.
|
||||
|
||||
3.1.4 (2018-10-4)
|
||||
=================
|
||||
|
||||
@@ -29,10 +29,11 @@ from .handlers import (
|
||||
handler_parse_document_version
|
||||
)
|
||||
from .links import (
|
||||
link_document_content, link_document_content_download,
|
||||
link_document_parsing_errors_list, link_document_submit_multiple,
|
||||
link_document_submit, link_document_type_parsing_settings,
|
||||
link_document_type_submit, link_error_list
|
||||
link_document_content, link_document_page_content,
|
||||
link_document_content_download, link_document_parsing_errors_list,
|
||||
link_document_submit_multiple, link_document_submit,
|
||||
link_document_type_parsing_settings, link_document_type_submit,
|
||||
link_error_list
|
||||
)
|
||||
from .permissions import (
|
||||
permission_content_view, permission_document_type_parsing_setup,
|
||||
@@ -76,6 +77,9 @@ class DocumentParsingApp(MayanAppConfig):
|
||||
Document = apps.get_model(
|
||||
app_label='documents', model_name='Document'
|
||||
)
|
||||
DocumentPage = apps.get_model(
|
||||
app_label='documents', model_name='DocumentPage'
|
||||
)
|
||||
DocumentType = apps.get_model(
|
||||
app_label='documents', model_name='DocumentType'
|
||||
)
|
||||
@@ -154,6 +158,9 @@ class DocumentParsingApp(MayanAppConfig):
|
||||
menu_facet.bind_links(
|
||||
links=(link_document_content,), sources=(Document,)
|
||||
)
|
||||
menu_facet.bind_links(
|
||||
links=(link_document_page_content,), sources=(DocumentPage,)
|
||||
)
|
||||
menu_multi_item.bind_links(
|
||||
links=(link_document_submit_multiple,), sources=(Document,)
|
||||
)
|
||||
|
||||
@@ -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):
|
||||
document_type = forms.ModelChoiceField(
|
||||
queryset=DocumentType.objects.none(), label=('Document type')
|
||||
|
||||
@@ -19,6 +19,11 @@ link_document_content = Link(
|
||||
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,
|
||||
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,
|
||||
permissions=(permission_content_view,), text=_('Parsing errors'),
|
||||
|
||||
@@ -25,13 +25,13 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
|
||||
super(DocumentContentViewsTestCase, self).setUp()
|
||||
self.login_user()
|
||||
|
||||
def _document_content_view(self):
|
||||
def _request_document_content_view(self):
|
||||
return self.get(
|
||||
'document_parsing:document_content', args=(self.document.pk,)
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
@@ -39,7 +39,29 @@ class DocumentContentViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.grant_access(
|
||||
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(
|
||||
response, 'Mayan EDMS Documentation', status_code=200
|
||||
|
||||
@@ -5,8 +5,9 @@ from django.conf.urls import url
|
||||
from .api_views import APIDocumentPageContentView
|
||||
from .views import (
|
||||
DocumentContentView, DocumentContentDownloadView,
|
||||
DocumentParsingErrorsListView, DocumentSubmitView,
|
||||
DocumentTypeSettingsEditView, DocumentTypeSubmitView, ParseErrorListView
|
||||
DocumentPageContentView, DocumentParsingErrorsListView,
|
||||
DocumentSubmitView, DocumentTypeSettingsEditView, DocumentTypeSubmitView,
|
||||
ParseErrorListView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
@@ -14,6 +15,10 @@ urlpatterns = [
|
||||
r'^documents/(?P<pk>\d+)/content/$', DocumentContentView.as_view(),
|
||||
name='document_content'
|
||||
),
|
||||
url(
|
||||
r'^documents/pages/(?P<pk>\d+)/content/$',
|
||||
DocumentPageContentView.as_view(), name='document_page_content'
|
||||
),
|
||||
url(
|
||||
r'^documents/(?P<pk>\d+)/content/download/$',
|
||||
DocumentContentDownloadView.as_view(), name='document_content_download'
|
||||
|
||||
@@ -10,9 +10,11 @@ from common.generics import (
|
||||
FormView, MultipleObjectConfirmActionView, SingleObjectDetailView,
|
||||
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 .permissions import (
|
||||
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):
|
||||
view_permission = permission_content_view
|
||||
|
||||
|
||||
Reference in New Issue
Block a user