Source code for ploneintranet.api.previews
# -*- coding: utf-8 -*-
""" Methods to generate and access preview images on content """
from ploneintranet.docconv.client.pdf import generate_pdf # noqa: F401
from ploneintranet.docconv.client.previews import converting # noqa: F401
from ploneintranet.docconv.client.previews import fallback_image_url # noqa: F401
from ploneintranet.docconv.client.previews import get_pdf # noqa: F401
from ploneintranet.docconv.client.previews import get_preview_urls # noqa: F401
from ploneintranet.docconv.client.previews import get_thumbnail # noqa: F401
from ploneintranet.docconv.client.previews import has_pdf # noqa: F401
from ploneintranet.docconv.client.previews import has_previews # noqa: F401
from ploneintranet.docconv.client.previews import is_allowed_document_type # noqa: F401
from ploneintranet.docconv.client.previews import num_pages # noqa: F401
from ploneintranet.docconv.client.previews import purge_previews # noqa: F401
from ploneintranet.docconv.client.previews import successfully_converted # noqa: F401
from zope.globalrequest import getRequest
import logging
logger = logging.getLogger(__name__)
event_keys = (
"ploneintranet.previews.handle_file_creation",
"ploneintranet.previews.content_added_in_workspace",
"ploneintranet.previews.content_edited_in_workspace",
)
[docs]def has_thumbnails(obj):
"""
Test if the object has generated previews.
As a fallback, also check for the presence of a lead image.
:param obj: The Plone object to get previews for
:type obj: A Plone content object
:return: True if there are previews. False otherwise.
:rtype: boolean
"""
if has_previews(obj):
return True
# also check for (lead) image
if not hasattr(obj, "image") or not obj.image:
return False
adapter = obj.unrestrictedTraverse("@@images")
if not adapter:
return False
return bool(adapter.available_sizes.get("mini"))
[docs]def get_thumbnail_url(obj, relative=False):
"""Convenience method to get the absolute URL of thumbnail image
:param obj: The Plone content object to get preview URLs for
:type obj: A Plone content object
:param relative: Specify whether the url should be relative or not
:type relative: boolean
:return: The absolute URL to the thumbnail image
:rtype: str
"""
urls = get_preview_urls(obj)
if len(urls) > 0:
return urls[0]
return fallback_image_url(obj)
[docs]def events_disable(request=None):
"""Temporarily disable event-driven preview generation for this request.
:param request: The request for which events are to be disabled
:type request: Request
"""
if not request:
request = getRequest()
if not request:
logger.error("No request available, cannot toggle event handling.")
return
for event_key in event_keys:
request[event_key] = False
[docs]def events_enable(request=None):
"""Re-enable event-driven preview generation for this request.
This only makes sense if you explicitly disabled preview generation,
since it is enabled by default.
:param request: The request for which events were disabled
:type request: Request
"""
if not request:
request = getRequest()
if not request:
logger.error("No request available, cannot toggle event handling.")
return
for event_key in event_keys:
request[event_key] = True