Consolidate the page thumbnail and staging folder thumbnail widgets.
Update the staging folder file image API end point to work in the same way the document page image API works.
This commit is contained in:
@@ -1,19 +1,14 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from converter.exceptions import UnkownConvertError, UnknownFileFormat
|
||||
from converter.models import Transformation
|
||||
from rest_framework import generics
|
||||
from rest_framework.response import Response
|
||||
|
||||
from documents.settings import setting_display_size
|
||||
|
||||
from .models import StagingFolderSource
|
||||
from .serializers import (
|
||||
StagingFolderFileSerializer,
|
||||
StagingFolderSerializer, StagingSourceFileImageSerializer
|
||||
)
|
||||
from .serializers import StagingFolderFileSerializer, StagingFolderSerializer
|
||||
|
||||
|
||||
class APIStagingSourceFileView(generics.GenericAPIView):
|
||||
@@ -51,47 +46,37 @@ class APIStagingSourceView(generics.RetrieveAPIView):
|
||||
queryset = StagingFolderSource.objects.all()
|
||||
|
||||
|
||||
class APIStagingSourceFileImageView(generics.GenericAPIView):
|
||||
class APIStagingSourceFileImageView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Image of the selected staging file.
|
||||
size -- 'x' seprated width and height of the desired image representation.
|
||||
page -- Page number of the staging file to be imaged.
|
||||
zoom -- Zoom level of the image to be generated, numeric value only.
|
||||
Returns an image representation of the selected document.
|
||||
---
|
||||
GET:
|
||||
omit_serializer: true
|
||||
parameters:
|
||||
- name: size
|
||||
description: 'x' seprated width and height of the desired image representation.
|
||||
paramType: query
|
||||
type: number
|
||||
"""
|
||||
|
||||
serializer_class = StagingSourceFileImageSerializer
|
||||
def get_serializer_class(self):
|
||||
return None
|
||||
|
||||
def get(self, request, staging_folder_pk, encoded_filename):
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
staging_folder = get_object_or_404(
|
||||
StagingFolderSource, pk=staging_folder_pk
|
||||
StagingFolderSource, pk=self.kwargs['staging_folder_pk']
|
||||
)
|
||||
staging_file = staging_folder.get_file(
|
||||
encoded_filename=encoded_filename
|
||||
encoded_filename=self.kwargs['encoded_filename']
|
||||
)
|
||||
|
||||
size = request.GET.get('size', setting_display_size.value)
|
||||
size = request.GET.get('size')
|
||||
|
||||
try:
|
||||
return Response({
|
||||
'status': 'success',
|
||||
'data': staging_file.get_image(
|
||||
as_base64=True, size=size,
|
||||
transformations=Transformation.objects.get_for_model(
|
||||
staging_folder, as_classes=True
|
||||
)
|
||||
return HttpResponse(
|
||||
staging_file.get_image(
|
||||
size=size,
|
||||
transformations=Transformation.objects.get_for_model(
|
||||
staging_folder, as_classes=True
|
||||
)
|
||||
})
|
||||
except UnknownFileFormat as exception:
|
||||
return Response(
|
||||
{
|
||||
'status': 'error', 'detail': 'unknown_file_format',
|
||||
'message': unicode(exception)
|
||||
}
|
||||
)
|
||||
except UnkownConvertError as exception:
|
||||
return Response(
|
||||
{
|
||||
'status': 'error', 'detail': 'converter_error',
|
||||
'message': unicode(exception)
|
||||
}
|
||||
)
|
||||
), content_type='image'
|
||||
)
|
||||
|
||||
@@ -29,7 +29,7 @@ from .links import (
|
||||
link_setup_source_edit, link_setup_source_logs, link_staging_file_delete,
|
||||
link_upload_version
|
||||
)
|
||||
from .widgets import staging_file_thumbnail
|
||||
from .widgets import StagingFileThumbnailWidget
|
||||
|
||||
|
||||
class SourcesApp(MayanAppConfig):
|
||||
@@ -67,13 +67,12 @@ class SourcesApp(MayanAppConfig):
|
||||
func=lambda context: context['object'].get_date_time_created()
|
||||
)
|
||||
|
||||
html_widget = StagingFileThumbnailWidget()
|
||||
SourceColumn(
|
||||
source=StagingFile,
|
||||
label=_('Thumbnail'),
|
||||
func=lambda context: staging_file_thumbnail(
|
||||
context['object'],
|
||||
gallery_name='sources:staging_list',
|
||||
title=context['object'].filename, size='100'
|
||||
func=lambda context: html_widget.render(
|
||||
instance=context['object'],
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ class StagingFile(object):
|
||||
def get_full_path(self):
|
||||
return os.path.join(self.staging_folder.folder_path, self.filename)
|
||||
|
||||
def get_image(self, size=None, as_base64=True, transformations=None):
|
||||
def get_image(self, size=None, as_base64=False, transformations=None):
|
||||
converter = converter_class(file_object=open(self.get_full_path()))
|
||||
|
||||
if size:
|
||||
|
||||
@@ -46,11 +46,6 @@ class StagingFolderSerializer(serializers.HyperlinkedModelSerializer):
|
||||
model = StagingFolderSource
|
||||
|
||||
|
||||
class StagingSourceFileImageSerializer(serializers.Serializer):
|
||||
status = serializers.CharField()
|
||||
data = serializers.CharField()
|
||||
|
||||
|
||||
class WebFormSourceSerializer(serializers.Serializer):
|
||||
class Meta:
|
||||
model = WebFormSource
|
||||
|
||||
@@ -1,105 +1,32 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.staticfiles.templatetags.staticfiles import static
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils.html import strip_tags
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from converter.literals import (
|
||||
DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL
|
||||
)
|
||||
from documents.settings import setting_preview_size, setting_thumbnail_size
|
||||
from documents.widgets import BaseDocumentThumbnailWidget
|
||||
|
||||
|
||||
def staging_file_thumbnail(staging_file, **kwargs):
|
||||
return staging_file_html_widget(
|
||||
staging_file, click_view='rest_api:stagingfolderfile-image-view',
|
||||
**kwargs
|
||||
)
|
||||
|
||||
|
||||
def staging_file_html_widget(staging_file, click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox-staging', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False):
|
||||
result = []
|
||||
|
||||
alt_text = _('Staging file page image')
|
||||
|
||||
query_dict = {
|
||||
'page': page,
|
||||
'zoom': zoom,
|
||||
'rotation': rotation,
|
||||
'size': size,
|
||||
class StagingFileThumbnailWidget(BaseDocumentThumbnailWidget):
|
||||
disable_title_link = True
|
||||
gallery_name = 'sources:staging_list'
|
||||
click_view_name = 'rest_api:stagingfolderfile-image-view'
|
||||
click_view_query_dict = {
|
||||
'size': setting_preview_size.value
|
||||
}
|
||||
preview_view_name = 'rest_api:stagingfolderfile-image-view'
|
||||
preview_view_query_dict = {
|
||||
'size': setting_thumbnail_size.value
|
||||
}
|
||||
|
||||
if gallery_name:
|
||||
gallery_template = 'rel="%s"' % gallery_name
|
||||
else:
|
||||
gallery_template = ''
|
||||
def get_click_view_kwargs(self, instance):
|
||||
return {
|
||||
'staging_folder_pk': instance.staging_folder.pk,
|
||||
'encoded_filename': instance.encoded_filename
|
||||
}
|
||||
|
||||
query_string = urlencode(query_dict)
|
||||
def get_preview_view_kwargs(self, instance):
|
||||
return {
|
||||
'staging_folder_pk': instance.staging_folder.pk,
|
||||
'encoded_filename': instance.encoded_filename
|
||||
}
|
||||
|
||||
preview_view = '%s?%s' % (
|
||||
reverse(
|
||||
'rest_api:stagingfolderfile-image-view',
|
||||
args=(
|
||||
staging_file.staging_folder.pk, staging_file.encoded_filename,
|
||||
)
|
||||
), query_string
|
||||
)
|
||||
|
||||
plain_template = []
|
||||
plain_template.append(
|
||||
'<img src="%s" alt="%s" />' % (preview_view, alt_text)
|
||||
)
|
||||
|
||||
result.append(
|
||||
'<div class="tc" id="staging_file-%s-%d">' % (
|
||||
staging_file.filename, page if page else DEFAULT_PAGE_NUMBER
|
||||
)
|
||||
)
|
||||
|
||||
if title:
|
||||
title_template = 'title="%s"' % strip_tags(title)
|
||||
else:
|
||||
title_template = ''
|
||||
|
||||
if click_view:
|
||||
# TODO: fix this hack
|
||||
query_dict['size'] = setting_preview_size.value
|
||||
query_string = urlencode(query_dict)
|
||||
result.append(
|
||||
'<a %s class="%s" href="%s" %s>' % (
|
||||
gallery_template, fancybox_class,
|
||||
'%s?%s' % (
|
||||
reverse(
|
||||
click_view,
|
||||
args=(
|
||||
staging_file.staging_folder.pk,
|
||||
staging_file.encoded_filename,
|
||||
)
|
||||
),
|
||||
query_string
|
||||
), title_template
|
||||
)
|
||||
)
|
||||
|
||||
if nolazyload:
|
||||
result.append(
|
||||
'<img style="border: 1px solid black;" src="%s" alt="%s" />' % (
|
||||
preview_view, alt_text
|
||||
)
|
||||
)
|
||||
else:
|
||||
result.append(
|
||||
'<img class="thin_border %s" data-src="%s" src="%s" alt="%s" />' % (
|
||||
image_class, preview_view,
|
||||
static('appearance/images/loading.png'), alt_text
|
||||
)
|
||||
)
|
||||
|
||||
if click_view:
|
||||
result.append('</a>')
|
||||
result.append('</div>')
|
||||
|
||||
return mark_safe(''.join(result))
|
||||
def get_title(self, instance):
|
||||
return instance.filename
|
||||
|
||||
Reference in New Issue
Block a user