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)