Source code for ploneintranet.docconv.client.handlers

from plone import api
from plone.api.exc import InvalidParameterError
from ploneintranet import api as pi_api
from ploneintranet.async.celeryconfig import ASYNC_ENABLED
from ploneintranet.async.tasks import GeneratePDF
from ploneintranet.attachments.attachments import IAttachmentStoragable
from ploneintranet.attachments.utils import IAttachmentStorage
from ploneintranet.docconv.client.interfaces import IPreviewSettings
from zope.globalrequest import getRequest

import logging


log = logging.getLogger(__name__)


[docs]def generate_pdf(obj, event=None, purge=False, countdown=10): """ Generates the pdf version of the given content by dispatching to the async service If purge is True, remove old previews before creating the new ones """ try: file_types = api.portal.get_registry_record("ploneintranet.docconv.file_types") html_types = api.portal.get_registry_record("ploneintranet.docconv.html_types") except InvalidParameterError: file_types = ["File"] html_types = ["Document"] if hasattr(obj, "portal_type") and obj.portal_type not in file_types + html_types: log.info( "Skipping documentconversion for %s (unsupported type)" % obj.absolute_url(1) ) return if ASYNC_ENABLED: if purge: pi_api.previews.purge_previews(obj) IPreviewSettings(obj).converting = True log.debug("> Generate PDF - ASYNC Mode has been selected.") generator = GeneratePDF(obj, getRequest()) log.info("Starting PDF generation with a delay of %s secs", countdown) generator(countdown=countdown) else: log.debug("generate_pdf - sync mode") pi_api.previews.generate_pdf(obj)
[docs]def handle_file_creation(obj, event=None, async=True): """ Need own subscriber as cdv insists on checking for its custom layout. Also we want our own async mechanism. """ request = getRequest() or {} event_key = "ploneintranet.previews.handle_file_creation" enabled = request.get(event_key, True) # default is enabled if not enabled: log.debug("%s disabled", event_key) return if async: log.debug("handle pdf creation - async mode") generate_pdf(obj) else: log.debug("handle pdf creation - sync mode") pi_api.previews.generate_pdf(obj)
[docs]def generate_attachment_preview_images(obj): if not IAttachmentStoragable.providedBy(obj): return attachment_storage = IAttachmentStorage(obj) for att_id in attachment_storage.keys(): attachment = attachment_storage.get(att_id) if not pi_api.previews.has_previews(attachment): log.debug( "generate_attachment_preview_images" " - generating attachment preview" ) generate_pdf(attachment)
[docs]def content_added_in_workspace(obj, event): event_key = "ploneintranet.previews.content_added_in_workspace" request = getRequest() or {} enabled = request.get(event_key, True) # default is enabled if not enabled: log.debug("%s disabled", event_key) return log.debug("content_added_in_workspace - calling generate_pdf") generate_pdf(obj)
[docs]def content_edited_in_workspace(obj, event): request = getRequest() if not hasattr(request, "form"): return try: request_url = request.getURL() except AttributeError: request_url = "" _get = request.form.get if ( _get("file") or _get("form.widgets.IFileField.file") or any( getattr(desc, "attributes", ()) == ("IRichText.text",) for desc in event.descriptions ) or _get("text") or request.get("method") == "PUT" or request_url.endswith("revertversion") ): event_key = "ploneintranet.previews.content_edited_in_workspace" enabled = request.get(event_key, True) # default is enabled if not enabled: log.debug("%s disabled", event_key) return generate_pdf(obj)