Fix document page render

Solve page_number > 1 error.
Add page_all to Document model.
Enable redactions.
Remove unused methods.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-10-09 00:38:08 -04:00
parent 8cf807899a
commit 5b37c7715d
8 changed files with 49 additions and 79 deletions

View File

@@ -37,7 +37,10 @@ from .serializers import (
DocumentVersionPageSerializer DocumentVersionPageSerializer
) )
from .settings import settings_document_page_image_cache_time from .settings import settings_document_page_image_cache_time
from .tasks import task_generate_document_page_image from .tasks import (
task_generate_document_page_image,
task_generate_document_version_page_image
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -169,11 +172,6 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
) )
return document return document
#def get_document_version(self):
# return get_object_or_404(
# self.get_document().versions.all(), pk=self.kwargs['version_pk']
# )
def get_queryset(self): def get_queryset(self):
return self.get_document().pages_all.all() return self.get_document().pages_all.all()
@@ -248,7 +246,7 @@ class APIDocumentVersionPageImageView(generics.RetrieveAPIView):
) )
def get_queryset(self): def get_queryset(self):
return self.get_document_version().pages_all.all() return self.get_document_version().pages.all()
def get_serializer(self, *args, **kwargs): def get_serializer(self, *args, **kwargs):
return None return None
@@ -334,11 +332,6 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
) )
return document return document
#def get_document_version(self):
# return get_object_or_404(
# self.get_document().versions.all(), pk=self.kwargs['version_pk']
# )
def get_queryset(self): def get_queryset(self):
return self.get_document().pages.all() return self.get_document().pages.all()
@@ -544,7 +537,7 @@ class APIRecentDocumentListView(generics.ListAPIView):
class APIDocumentVersionPageListView(generics.ListAPIView): class APIDocumentVersionPageListView(generics.ListAPIView):
serializer_class = DocumentPageSerializer serializer_class = DocumentVersionPageSerializer
def get_document(self): def get_document(self):
document = get_object_or_404(Document, pk=self.kwargs['pk']) document = get_object_or_404(Document, pk=self.kwargs['pk'])

View File

@@ -120,7 +120,7 @@ class DocumentsApp(MayanAppConfig):
DeletedDocument = self.get_model(model_name='DeletedDocument') DeletedDocument = self.get_model(model_name='DeletedDocument')
Document = self.get_model(model_name='Document') Document = self.get_model(model_name='Document')
DocumentPage = self.get_model(model_name='DocumentVersionPage') DocumentPage = self.get_model(model_name='DocumentPage')
DocumentPageResult = self.get_model(model_name='DocumentVersionPageResult') DocumentPageResult = self.get_model(model_name='DocumentVersionPageResult')
DocumentType = self.get_model(model_name='DocumentType') DocumentType = self.get_model(model_name='DocumentType')
DocumentTypeFilename = self.get_model(model_name='DocumentTypeFilename') DocumentTypeFilename = self.get_model(model_name='DocumentTypeFilename')

View File

@@ -136,11 +136,6 @@ class DocumentVersionPageManager(models.Manager):
return self.get(document_version__pk=document_version.pk, page_number=page_number) return self.get(document_version__pk=document_version.pk, page_number=page_number)
def get_queryset(self):
return models.QuerySet(
model=self.model, using=self._db
).filter(enabled=True)
class DuplicatedDocumentManager(models.Manager): class DuplicatedDocumentManager(models.Manager):
def clean_empty_duplicate_lists(self): def clean_empty_duplicate_lists(self):

View File

@@ -146,9 +146,9 @@ class Document(models.Model):
) )
def get_api_image_url(self, *args, **kwargs): def get_api_image_url(self, *args, **kwargs):
latest_version = self.latest_version first_page = self.pages.first()
if latest_version: if first_page:
return latest_version.get_api_image_url(*args, **kwargs) return first_page.get_api_image_url(*args, **kwargs)
@property @property
def is_in_trash(self): def is_in_trash(self):
@@ -179,6 +179,30 @@ class Document(models.Model):
""" """
return self.latest_version.open(*args, **kwargs) return self.latest_version.open(*args, **kwargs)
@property
def page_count(self):
return self.pages.count()
@property
def pages(self):
return self.pages.all()
#try:
# return self.latest_version.pages
#except AttributeError:
# # Document has no version yet
# DocumentPage = apps.get_model(
# app_label='documents', model_name='DocumentVersionPage'
# )
# return DocumentPage.objects.none()
@property
def pages_all(self):
DocumentPage = apps.get_model(
app_label='documents', model_name='DocumentPage'
)
return DocumentPage.passthrough.filter(document=self)
def reset_pages(self): def reset_pages(self):
with transaction.atomic(): with transaction.atomic():
for page in self.pages.all(): for page in self.pages.all():
@@ -261,34 +285,3 @@ class Document(models.Model):
@property @property
def latest_version(self): def latest_version(self):
return self.versions.order_by('timestamp').last() return self.versions.order_by('timestamp').last()
@property
def page_count(self):
return self.pages.count()
#return self.latest_version.page_count
@property
def pages_all(self):
return self.pages.all()
#try:
# return self.latest_version.pages_all
#except AttributeError:
# # Document has no version yet
# DocumentPage = apps.get_model(
# app_label='documents', model_name='DocumentPage'
# )
# return DocumentPage.objects.none()
@property
def pages(self):
return self.pages.all()
#try:
# return self.latest_version.pages
#except AttributeError:
# # Document has no version yet
# DocumentPage = apps.get_model(
# app_label='documents', model_name='DocumentVersionPage'
# )
# return DocumentPage.objects.none()

View File

@@ -89,10 +89,6 @@ class DocumentPage(models.Model):
# page_number=self.page_number # page_number=self.page_number
# ) # )
#@property
#def document(self):
# return self.document_version.document
def generate_image(self, user=None, **kwargs): def generate_image(self, user=None, **kwargs):
transformation_list = self.get_combined_transformation_list(user=user, **kwargs) transformation_list = self.get_combined_transformation_list(user=user, **kwargs)
combined_cache_filename = BaseTransformation.combine(transformation_list) combined_cache_filename = BaseTransformation.combine(transformation_list)
@@ -138,9 +134,7 @@ class DocumentPage(models.Model):
final_url.args = kwargs final_url.args = kwargs
final_url.path = reverse( final_url.path = reverse(
viewname='rest_api:documentpage-image', kwargs={ viewname='rest_api:documentpage-image', kwargs={
'pk': self.document.pk, 'pk': self.document.pk, 'page_pk': self.pk
#'version_pk': self.document_version.pk,
'page_pk': self.pk
} }
) )
final_url.args['_hash'] = transformations_hash final_url.args['_hash'] = transformations_hash
@@ -229,17 +223,23 @@ class DocumentPage(models.Model):
try: try:
#with self.document_version.get_intermediate_file() as file_object: #with self.document_version.get_intermediate_file() as file_object:
#Render or get cached document version page #Render or get cached document version page
#self.content_object.generate_image()
self.content_object.get_image() self.content_object.get_image()
cache_filename = 'base_image' cache_filename = 'base_image'
cache_file = self.content_object.cache_partition.get_file(filename=cache_filename) cache_file = self.content_object.cache_partition.get_file(filename=cache_filename)
with cache_file.open() as file_object: with cache_file.open() as file_object:
converter = get_converter_class()( converter = get_converter_class()(
file_object=file_object file_object=file_object
) )
converter.seek_page(page_number=self.page_number - 1) converter.seek_page(page_number=0)
#self.page_number - 1)
page_image = converter.get_page() page_image = converter.get_page()
cache_filename = 'document_page'
# Since open "wb+" doesn't create files, create it explicitly # Since open "wb+" doesn't create files, create it explicitly
with self.cache_partition.create_file(filename=cache_filename) as file_object: with self.cache_partition.create_file(filename=cache_filename) as file_object:
file_object.write(page_image.getvalue()) file_object.write(page_image.getvalue())

View File

@@ -246,17 +246,6 @@ class DocumentVersion(models.Model):
return result return result
#@property
#def pages_all(self):
# DocumentPage = apps.get_model(
# app_label='documents', model_name='DocumentVersionPage'
# )
# return DocumentPage.passthrough.filter(document_version=self)
#@property
#def pages(self):
# return self.pages.all()
@property @property
def page_count(self): def page_count(self):
""" """

View File

@@ -21,7 +21,7 @@ from mayan.apps.converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL
from ..forms import DocumentPageForm from ..forms import DocumentPageForm
from ..icons import icon_document_pages from ..icons import icon_document_pages
from ..links import link_document_update_page_count from ..links import link_document_update_page_count
from ..models import Document, DocumentVersionPage from ..models import Document, DocumentPage, DocumentVersionPage
from ..permissions import permission_document_edit, permission_document_view from ..permissions import permission_document_edit, permission_document_view
from ..settings import ( from ..settings import (
setting_rotation_step, setting_zoom_percent_step, setting_zoom_max_level, setting_rotation_step, setting_zoom_percent_step, setting_zoom_max_level,
@@ -69,7 +69,7 @@ class DocumentPageListView(ExternalObjectMixin, SingleObjectListView):
class DocumentPageNavigationBase(ExternalObjectMixin, RedirectView): class DocumentPageNavigationBase(ExternalObjectMixin, RedirectView):
external_object_class = DocumentVersionPage external_object_class = DocumentPage
external_object_permission = permission_document_view external_object_permission = permission_document_view
external_object_pk_url_kwarg = 'pk' external_object_pk_url_kwarg = 'pk'
@@ -164,7 +164,7 @@ class DocumentPageNavigationPrevious(DocumentPageNavigationBase):
class DocumentPageView(ExternalObjectMixin, SimpleView): class DocumentPageView(ExternalObjectMixin, SimpleView):
external_object_class = DocumentVersionPage external_object_class = DocumentPage
external_object_permission = permission_document_view external_object_permission = permission_document_view
external_object_pk_url_kwarg = 'pk' external_object_pk_url_kwarg = 'pk'
template_name = 'appearance/generic_form.html' template_name = 'appearance/generic_form.html'
@@ -204,7 +204,7 @@ class DocumentPageViewResetView(RedirectView):
class DocumentPageInteractiveTransformation(ExternalObjectMixin, RedirectView): class DocumentPageInteractiveTransformation(ExternalObjectMixin, RedirectView):
external_object_class = DocumentVersionPage external_object_class = DocumentPage
external_object_permission = permission_document_view external_object_permission = permission_document_view
external_object_pk_url_kwarg = 'pk' external_object_pk_url_kwarg = 'pk'
@@ -289,7 +289,7 @@ class DocumentPageDisable(MultipleObjectConfirmActionView):
return result return result
def get_source_queryset(self): def get_source_queryset(self):
return DocumentVersionPage.passthrough.all() return DocumentPage.passthrough.all()
def object_action(self, form, instance): def object_action(self, form, instance):
instance.enabled = False instance.enabled = False
@@ -319,7 +319,7 @@ class DocumentPageEnable(MultipleObjectConfirmActionView):
return result return result
def get_source_queryset(self): def get_source_queryset(self):
return DocumentVersionPage.passthrough.all() return DocumentPage.passthrough.all()
def object_action(self, form, instance): def object_action(self, form, instance):
instance.enabled = True instance.enabled = True

View File

@@ -28,7 +28,7 @@ class RedactionsApp(MayanAppConfig):
super(RedactionsApp, self).ready() super(RedactionsApp, self).ready()
DocumentPage = apps.get_model( DocumentPage = apps.get_model(
app_label='documents', model_name='DocumentVersionPage' app_label='documents', model_name='DocumentPage'
) )
link_redaction_list = link_transformation_list.copy( link_redaction_list = link_transformation_list.copy(