Skip to content

Instantly share code, notes, and snippets.

@malthe
Created November 4, 2010 14:51
Show Gist options
  • Save malthe/662563 to your computer and use it in GitHub Desktop.
Save malthe/662563 to your computer and use it in GitHub Desktop.
Traverse to image scales which are automatically created if missing!
class SomeArchetypeWithImages(...):
def __bobo_traverse__(self, REQUEST, name):
if name in self.image_field_ids:
field = self.getField(name)
image = field.getScale(self)
else:
# decode request
parts = name.split('_')
field_name = '_'.join(parts[:-1])
scale = len(parts) > 1 and parts[-1] or None
if field_name in self.image_field_ids:
field = self.getField(field_name)
image = field.getScale(self, scale=scale)
if scale in field.sizes and not image:
try:
state = self._p_changed
except (ConflictError, KeyboardInterrupt):
raise
except:
state = 0
# as unrestricted user ...
old = security.loginAsUnrestrictedUser()
try:
# recreate (all!) scales
logging.warn(
'Recreating scales for: %s.' % \
self.absolute_url(1))
field.removeScales(self)
field.createScales(self)
finally:
security.loginAsUser(old)
if state is None:
self._p_deactivate()
# try again
image = field.getScale(self, scale=scale)
else:
image = None
if image is not None and not isinstance(image, basestring):
return image
return folder.ATFolder.__bobo_traverse__(self, REQUEST, name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment