Created
November 4, 2010 14:51
-
-
Save malthe/662563 to your computer and use it in GitHub Desktop.
Traverse to image scales which are automatically created if missing!
This file contains 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
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