def __bobo_traverse__(self, REQUEST, name):
    """Transparent access to multilanguage image scales for
       content types holding an multilanguage ImageField named
       'image'

       NO BLOBS
    """
    if name.startswith('image_') or name == 'image':
        field = self.getField('image')
        if not IMultilanguageField.providedBy(field):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                _scale = scale
                if _scale is not None:
                    _scale = '_'+str(_scale)
                else:
                    _scale = ''
                REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            image = None
            if scale:
                if scale in field.getAvailableSizes(self):
                    image = field.getScale(self, scale=scale)
            else:
                image = field.getScale(self)
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if scale:
                        if scale in field.getAvailableSizes(self):
                            image = field.getScale(self, scale=scale)
                    else:
                        image = field.getScale(self)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None and not isinstance(image, basestring):
            # image might be None or '' for empty images
            return image
    return BaseObject.__bobo_traverse__(self, REQUEST, name)
def __bobo_traverse__(self, REQUEST, name):
    """ helper to access multilanguage image scales the old way during
        `unrestrictedTraverse` calls

        the method to be patched is '__bobo_traverse__'
    """
    if name.startswith('image_') or name == 'image':
        field = self.getField(name.split('_')[0])
        if not IMultilanguageField.providedBy(field) or not hasattr(REQUEST, 'get'):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                # begin own code
                if scale in field.getAvailableSizes(self):
                    # end own code
                    _scale = scale
                    if _scale is not None:
                        _scale = '_'+str(_scale)
                    else:
                        _scale = ''
                    REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            handler = IImageScaleHandler(field, None)
            image = None
            if handler is not None:
                try:
                    image = handler.getScale(self, scale)
                except AttributeError: # no image available, do not raise as there might be one available as a fallback
                    pass
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if handler is not None:
                        image = handler.getScale(self, scale)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None:
            return image
    return BaseObject.__bobo_traverse__(self, REQUEST, name)
Пример #3
0
    def __blob__bobo_traverse__(self, REQUEST, name):
        """ helper to access multilanguage image scales the old way during
            `unrestrictedTraverse` calls

            the method to be patched is '__bobo_traverse__'
        """
        field = self.getField(name.split('_')[0])
        if not IMultilanguageField.providedBy(field) or not hasattr(REQUEST, 'get'):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                _scale = scale
                if _scale is not None:
                    _scale = '_'+str(_scale)
                else:
                    _scale = ''
                REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            handler = IImageScaleHandler(field, None)
            image = None
            if handler is not None:
                try:
                    image = handler.getScale(self, scale)
                except AttributeError: # no image available, do not raise as there might be one available as a fallback
                    pass
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if handler is not None:
                        image = handler.getScale(self, scale)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None:
            return image
        return BaseObject.__bobo_traverse__(self, REQUEST, name)
Пример #4
0
 def __bobo_traverse__(self, request, name):
     # TODO: replace with IPublishTraverse or/and ITraverse
     if hasattr(self, 'documents'):
         if self.documents.has_key(name):
             return aq_inner(getattr(self.documents, name)).__of__(self)
     return BaseObject.__bobo_traverse__(self, request, name)
Пример #5
0
 def __bobo_traverse__(self, request, name):
     # TODO: replace with IPublishTraverse or/and ITraverse
     if hasattr(self, 'documents'):
         if self.documents.has_key(name):
             return aq_inner(getattr(self.documents, name)).__of__(self)
     return BaseObject.__bobo_traverse__(self, request, name)