Пример #1
0
 def traverse(self, name, furtherPath):
     if furtherPath:
         raise TraversalError('Do not know how to handle further path')
     else:
         if self.scale:
             return self.scale.tag()
         else:
             raise TraversalError(name)
Пример #2
0
 def traverse(self, name, furtherPath):
     if name != 'has-structured-doc':
         raise TraversalError("Unknown query %r" % name)
     if len(furtherPath) > 0:
         raise TraversalError(
             "There should be no further path segments after "
             "query:has-structured-doc")
     return self.widget.context.queryTaggedValue('has_structured_doc')
Пример #3
0
    def traverse(self, name, ignored):
        # Populate translation info
        self.info['target_language'] = ILanguage(self.context).get_language()

        catalog = getToolByName(self.context, 'portal_catalog')
        # Search source object using unrestricted API,
        # because user may be anonymous during traverse.
        brains = catalog.unrestrictedSearchResults(UID=name)
        if len(brains) != 1:
            raise TraversalError(self.context, name)
        source = brains[0]._unrestrictedGetObject()

        self.info['source_language'] = ILanguage(source).get_language()
        self.info['portal_type'] = source.portal_type
        self.info['tg'] = ITG(source)

        # If source has already been translated to this language, just redirect
        for brain in catalog.unrestrictedSearchResults(
                TranslationGroup=self.info['tg'],
                Language=self.info['target_language']):
            self.request.response.redirect(brain.getURL())
            return u''

        # XXX: register this adapter on dx container and a second one for AT
        if not IDexterityContent.providedBy(source):
            # we are not on DX content, assume AT
            baseUrl = self.context.absolute_url()
            url = '%s/@@add_at_translation?type=%s' % (baseUrl, name)
            return self.request.response.redirect(url)

        # set the self.context to the place where it should be stored
        if not IFolderish.providedBy(self.context):
            self.context = self.context.__parent__

        # get the type information
        ttool = getToolByName(self.context, 'portal_types')
        ti = ttool.getTypeInfo(self.info['portal_type'])

        if ti is None:
            logger.error('No type information found for {0}'.format(
                self.info['portal_type']))
            raise TraversalError(self.context, name)

        registry = getUtility(IRegistry)
        settings = registry.forInterface(IMultiLanguageExtraOptionsSchema)

        if not settings.redirect_babel_view:
            add_view = None
        else:
            add_view = queryMultiAdapter((self.context, self.request, ti),
                                         name='babel_view')
        if add_view is None:
            add_view = queryMultiAdapter((self.context, self.request, ti))
            if add_view is not None:
                raise TraversalError(self.context, name)

        add_view.__name__ = ti.factory
        return add_view.__of__(self.context)
Пример #4
0
 def traverse(self, name, furtherPath):
     if name == 'nl_to_br':
         return self.nl_to_br()
     elif name == 'escape':
         return self.escape()
     elif name == 'lower':
         return self.lower()
     elif name == 'break-long-words':
         return self.break_long_words()
     elif name == 'markdown':
         return self.markdown()
     elif name == 'text-to-html':
         return self.text_to_html()
     elif name == 'text-to-html-with-target':
         return self.text_to_html_with_target()
     elif name == 'nice_pre':
         return self.nice_pre()
     elif name == 'email-to-html':
         return self.email_to_html()
     elif name == 'obfuscate-email':
         return self.obfuscate_email()
     elif name == 'strip-email':
         return self.strip_email()
     elif name == 'linkify-email':
         return self.linkify_email()
     elif name == 'shorten':
         if len(furtherPath) == 0:
             raise TraversalError(
                 "you need to traverse a number after fmt:shorten")
         maxlength = int(furtherPath.pop())
         return self.shorten(maxlength)
     elif name == 'ellipsize':
         if len(furtherPath) == 0:
             raise TraversalError(
                 "you need to traverse a number after fmt:ellipsize")
         maxlength = int(furtherPath.pop())
         return self.ellipsize(maxlength)
     elif name == 'diff':
         return self.format_diff()
     elif name == 'ssdiff':
         return self.format_ssdiff()
     elif name == 'css-id':
         if len(furtherPath) > 0:
             return self.css_id(furtherPath.pop())
         else:
             return self.css_id()
     elif name == 'zope-css-id':
         if len(furtherPath) > 0:
             return self.zope_css_id(furtherPath.pop())
         else:
             return self.zope_css_id()
     elif name == 'oops-id':
         return self.oops_id()
     else:
         raise TraversalError(name)
Пример #5
0
    def traverse(self, name, furtherPath):
        """Used for path traversal, i.e. in zope page templates.

        This method is called when you have something like this in a
        page template:

        <img tal:replace="structure context/@@images/image/mini" />

        What then happens during traversal, is that the traverse method
        gets called twice: we first traverse to name='image' and then to
        name='mini'.  The traversal is done by the Zope page template
        machinery.  There are differences between standard
        zope.pagetemplate and five.pt (chameleon).  Roughly, it happens
        like follows.

        With zope.pagetemplate:

        view = <the @@images view for this context>
        new_view = view.traverse('image', ['mini'])
        tag = new_view.traverse('mini', [])

        And with five.pt:

        view = <the @@images view for this context>
        new_view = view.traverse('image', ('mini', ))
        tag = new_view.traverse('mini', ())
        """
        if not furtherPath:
            if hasattr(self, '_image_fieldname'):
                # We have been here before, with the current name argument in
                # the furtherPath.
                scale_name = name
                name = self._image_fieldname
            else:
                scale_name = None
            field = self.context.getField(name)
            image = self.scale(name, scale_name)
            if image is not None:
                return image.tag()
            raise TraversalError(self, name)
        field = self.field(name)
        if field is not None:
            # We have an image field of this name.  Store the scale name on
            # self and return it.  Since there is a furtherPath, we will get
            # called again in a moment, with this same 'self' with the
            # _image_fieldname attribute, and with the current furtherPath as
            # name, and an empty furtherPath.
            self._image_fieldname = name
            return self
        raise TraversalError(self, name)
Пример #6
0
 def traverse(self, name, furtherPath):
     if name == "heading":
         return self.heading()
     elif name == "logo":
         return self.logo()
     else:
         raise TraversalError(name)
 def __init__(self, context, request, name):
     PyPISimpleView.__init__(self, context, request)
     self.context = context
     self.request = request
     self.project_name = name
     self.projects = self._get_projects(name)
     if self.projects == []:
         raise TraversalError(self.context, name)
Пример #8
0
 def traverse(self, name, ignored):
     self.request.shiftNameToApplication()
     try:
         skin = component.getUtility(IRESTSkinType, name)
     except ComponentLookupError:
         raise TraversalError("++rest++%s" % name)
     applySkin(self.request, skin)
     return self.context
    def traverse(self, name, ignored):
        if name == '':
            return PyPISimpleTraverser(self.context, self.request)

        path = name.split('/')
        if len(path) == 1:
            return PyPIProjectView(self.context, self.request, path[0])
        raise TraversalError(self.context, name)
Пример #10
0
    def traverse(self, name, furtherPath):
        container = self._container

        v = container.get(name, _marker)
        if v is _marker:
            try:
                # Note that if name is a unicode string, getattr will
                # implicitly try to encode it using the system
                # encoding (usually ascii). Failure to encode means
                # invalid attribute name.
                v = getattr(container, name, _marker)
            except UnicodeEncodeError:
                raise TraversalError(container, name)
            if v is _marker:
                raise TraversalError(container, name)

        return v
Пример #11
0
 def traverse(self, name, furtherPath):
     """ used for path traversal, i.e. in zope page templates """
     if not furtherPath:
         field = self.context.getField(name)
         return field.get(self.context).tag()
     image = self.scale(name, furtherPath.pop())
     if image is not None:
         return image.tag()
     raise TraversalError(self, name)
Пример #12
0
 def traverse(self, name, furtherPath):
     result = getattr(self.context, name, self._marker)
     if result is self._marker:
         try:
             result = self.context.get(name, self._marker)
         except AttributeError:
             pass
     if result is self._marker:
         raise TraversalError(name)
     return result
Пример #13
0
 def traverse(self, name, ignored):
     objs = container.Products(self.context, '++products++', 'sqlsession')
     objs = objs.__of__(self.context)
     if not name:
         return objs
     else:
         try:
             return objs[name]
         except KeyError:
             raise TraversalError(self.context, name)
Пример #14
0
    def traverse(self, name, ignore):

        if name == 'default':
            name = u''

        conversation = queryAdapter(self.context, IConversation, name=name)
        if conversation is None:
            raise TraversalError(name)  # pragma: no cover

        return conversation
Пример #15
0
    def traverse(self, name, furtherPath):
        """Fix image generation using traversal. The only valid option
        for image field name is "image"; that's the difference with
        the original code. We need to find out later if this is a bug
        in plone.app.imaging or not.

        See: https://github.com/collective/collective.nitf/pull/171
        """
        if not furtherPath:
            if safe_hasattr(self, '_image_fieldname'):
                scale_name = name
                name = self._image_fieldname
            else:
                scale_name = None
            image = self.scale(name, scale_name)
            if image is not None:
                return image.tag()
            raise TraversalError(self, name)
        if name == 'image':
            self._image_fieldname = name
            return self
        raise TraversalError(self, name)
Пример #16
0
    def traverse(self, name, ignored):
        ttool = getToolByName(self.context, 'portal_types')
        ti = ttool.getTypeInfo(name)
        if ti is not None:
            add_view = queryMultiAdapter((self.context, self.request, ti),
                                         name=ti.factory)
            if add_view is None:
                add_view = queryMultiAdapter((self.context, self.request, ti))
            if add_view is not None:
                add_view.__name__ = ti.factory
                return add_view.__of__(self.context)

        raise TraversalError(self.context, name)
Пример #17
0
 def traverse(self, name, furtherPath):
     """ used for path traversal, i.e. in zope page templates """
     # validate access
     value = self.guarded_orig_image(name)
     if not furtherPath:
         image = ImageScale(self.context,
                            self.request,
                            data=value,
                            fieldname=name)
     else:
         image = self.scale(name, furtherPath.pop())
     if image is not None:
         return image.tag()
     raise TraversalError(self, name)
Пример #18
0
    def traverse(self, name, ignored):
        """Form traversal adapter.

        This adapter allows any LaunchpadFormView to simply render the
        form body.
        """
        # Note: removeSecurityProxy seems necessary here as otherwise
        # isinstance below doesn't determine the type of the context.
        context = removeSecurityProxy(self.context)

        if isinstance(context, LaunchpadFormView):
            # Note: without explicitly creating the BoundPageTemplate here
            # the view fails to render.
            context.index = bind_template(FormNamespaceView.template, context)
        else:
            raise TraversalError("The URL does not correspond to a form.")

        return self.context
Пример #19
0
    def traverse(self, name, ignored):
        ti = queryUtility(IDexterityFTI, name=name)

        if ti is not None:

            add_view = queryMultiAdapter((self.context, self.request, ti),
                                         name=name)

            if add_view is None:
                add_view = queryMultiAdapter((self.context, self.request, ti))

            if add_view is not None:
                #add_view.__name__ = name
                #view = ImplicitAcquisitionWrapper(add_view, self.context)
                view = add_view.__of__(self.context)
                return view

        raise TraversalError(self.context, name)
Пример #20
0
def traverse(self, name, ignored):
    if not name:
        raise TraversalError(self.context, name)
    return old_traverse(self, name, ignored)
Пример #21
0
 def traverse(self, name, further_path):
     try:
         return self[name]
     except KeyError:
         raise TraversalError(self, name)
Пример #22
0
    def traverse(self, name, ignored):

        form = self._prepareForm()

        # Since we cannot check security during traversal,
        # we delegate the check to the widget view.
        alsoProvides(self.request, IDeferSecurityCheck)
        form.update()
        noLongerProvides(self.request, IDeferSecurityCheck)

        # If name begins with form.widgets., remove it
        form_widgets_prefix = util.expandPrefix(
            form.prefix) + util.expandPrefix(form.widgets.prefix)
        if name.startswith(form_widgets_prefix):
            name = name[len(form_widgets_prefix):]

        # Split string up into dotted segments and work through
        target = aq_base(form)
        parts = name.split('.')
        while len(parts) > 0:
            part = parts.pop(0)
            if type(getattr(
                    target, 'widgets',
                    None)) is list:  # i.e. a z3c.form.widget.MultiWidget
                try:
                    # part should be integer index in list, look it up
                    target = target.widgets[int(part)]
                except IndexError:
                    raise TraversalError("'" + part + "' not in range")
                except ValueError:
                    #HACK: part isn't integer. Iterate through widgets to
                    # find matching name. This is required for
                    # DataGridField, which appends 'AA' and 'TT' rows to
                    # it's widget list.
                    full_name = util.expandPrefix(target.prefix) + part
                    filtered = [
                        w for w in target.widgets if w.name == full_name
                    ]
                    if len(filtered) == 1:
                        target = filtered[0]
                    else:
                        raise TraversalError("'" + part + "' not valid index")
            elif hasattr(target, 'widgets'):  # Either base form, or subform
                # Check to see if we can find a "Behaviour.widget"
                new_target = None
                if len(parts) > 0:
                    new_target = self._form_traverse(target,
                                                     part + '.' + parts[0])

                if new_target is not None:
                    # Remove widget name from stack too
                    parts.pop(0)
                else:
                    # Find widget in form without behaviour prefix
                    new_target = self._form_traverse(target, part)

                target = new_target
            elif hasattr(
                    target, 'subform'
            ):  # subform-containing widget, only option is to go into subform
                if part == 'widgets':
                    target = target.subform
                else:
                    target = None
            else:
                raise TraversalError('Cannot traverse through ' +
                                     target.__repr__())

            # Could not traverse from target to part
            if target is None: raise TraversalError(part)

        # Make the parent of the widget the traversal parent.
        # This is required for security to work in Zope 2.12
        if target is not None:
            target.__parent__ = aq_inner(self.context)
            return target
        raise TraversalError(name)