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)
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')
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)
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)
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)
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)
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)
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
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)
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
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)
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
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)
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)
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)
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
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)
def traverse(self, name, ignored): if not name: raise TraversalError(self.context, name) return old_traverse(self, name, ignored)
def traverse(self, name, further_path): try: return self[name] except KeyError: raise TraversalError(self, name)
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)