Source code for invenio_previewer.views
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2016-2019 CERN.
#
# Invenio is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
"""View method for Invenio-Records-UI for previewing files."""
from __future__ import absolute_import, print_function
from flask import Blueprint, abort, current_app, request
from .api import PreviewFile
from .extensions import default
from .proxies import current_previewer
blueprint = Blueprint(
'invenio_previewer',
__name__,
template_folder='templates',
static_folder='static',
)
"""Blueprint used to register template and static folders."""
[docs]def preview(pid, record, template=None, **kwargs):
"""Preview file for given record.
Plug this method into your ``RECORDS_UI_ENDPOINTS`` configuration:
.. code-block:: python
RECORDS_UI_ENDPOINTS = dict(
recid=dict(
# ...
route='/records/<pid_value/preview/<path:filename>',
view_imp='invenio_previewer.views.preview',
record_class='invenio_records_files.api:Record',
)
)
"""
# Get file from record
fileobj = current_previewer.record_file_factory(
pid, record, request.view_args.get(
'filename', request.args.get('filename', type=str))
)
if not fileobj:
abort(404)
# Try to see if specific previewer is set
file_previewer = fileobj.get('previewer')
# Find a suitable previewer
fileobj = PreviewFile(pid, record, fileobj)
for plugin in current_previewer.iter_previewers(
previewers=[file_previewer] if file_previewer else None):
if plugin.can_preview(fileobj):
try:
return plugin.preview(fileobj)
except Exception:
current_app.logger.warning(
('Preview failed for {key}, in {pid_type}:{pid_value}'
.format(key=fileobj.file.key,
pid_type=fileobj.pid.pid_type,
pid_value=fileobj.pid.pid_value)),
exc_info=True)
return default.preview(fileobj)
[docs]@blueprint.app_template_test('previewable')
def is_previewable(extension):
"""Test if a file can be previewed checking its extension."""
return extension in current_previewer.previewable_extensions