Created
August 30, 2017 06:18
-
-
Save tomgross/bb6d741c032207b22bcbf1e936ae18ee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from plone import api | |
from plone.behavior.interfaces import IBehaviorAssignable | |
from plone.dexterity.interfaces import IDexterityFTI | |
from plone.dexterity.interfaces import IDexteritySchema | |
from plone.namedfile.interfaces import INamedBlobFileField | |
from plone.namedfile.interfaces import INamedImageField | |
from z3c.caching.interfaces import IPurgePaths | |
from zope.component import adapter | |
from zope.component import getUtility | |
from zope.interface import implementer | |
from zope.schema import getFieldsInOrder | |
@implementer(IPurgePaths) | |
@adapter(IDexteritySchema) | |
class ContentPurgePaths(object): | |
"""Paths to purge for Dexterity object fields | |
""" | |
def __init__(self, context): | |
self.context = context | |
def getScales(self): | |
reg_list = api.portal.get_registry_record('plone.allowed_sizes') | |
sizes = [i.split(' ', 1)[0] for i in reg_list] | |
sizes.append('download') | |
return sizes | |
def getRelativePaths(self): | |
prefix = '/' + self.context.virtual_url_path() | |
def fieldFilter(): | |
portal_type = self.context.getPortalTypeName() | |
fti = getUtility(IDexterityFTI, name=portal_type) | |
schema = fti.lookupSchema() | |
fields = getFieldsInOrder(schema) | |
assignable = IBehaviorAssignable(self.context, None) | |
for behavior in assignable.enumerateBehaviors(): | |
if behavior.marker: | |
new_fields = getFieldsInOrder(behavior.marker) | |
if len(new_fields) > 0: | |
fields = fields + new_fields | |
obj_fields = [] | |
for key, value in fields: | |
is_image = INamedImageField.providedBy(value) | |
is_file = INamedBlobFileField.providedBy(value) | |
if is_image or is_file: | |
obj_fields.append(value) | |
return obj_fields | |
for item in fieldFilter(): | |
field = item.getName() | |
value = item.get(self.context) | |
if not value: | |
continue | |
if INamedImageField.providedBy(item): | |
for size in self.getScales(): | |
yield '{0}/@@images/{1}/{2}'.format(prefix, field, size,) | |
yield '{0}/@@download/{1}'.format(prefix, field) | |
else: | |
filename = value.filename | |
if isinstance(filename, unicode): | |
filename = filename.encode('utf-8') | |
yield '{0}/@@download/{1}/{2}'.format(prefix, field, filename) | |
def getAbsolutePaths(self): | |
return [] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment