PyAMS namespace traverser¶
-PyAMS_utils provide a custom URL traverser, defined in package pyams_utils.traversing
.
The NamespaceTraverser
is a custom traverser based on default
-Pyramid’s ResourceTreeAdapter, but it adds the ability to use namespaces. Inherited from Zope3 concept, a
-namespace is a resource path element starting with the « ++ » characters, like this:
http://localhost:5432/folder/content/++ns++argument/@@view.html
-
In this sample, ns is the namespace name. When the traverser detects a namespace, it looks for several named
-adapters (or multi-adapters) to the ITraversable
interface
-defined in zope.traversing package. Adapters lookup with name ns is done for the current context and request,
-then only for the context and finally for the request, in this order. If a traversing adapter is found, it’s
-traverse()
method is called, with the attr value as first argument, and the rest of the traversal stack
-as second one.
This is for example how a custom etc namespace traverser is defined:
-from pyams_utils.interfaces.site import ISiteRoot
-from zope.traversing.interfaces import ITraversable
-
-from pyams_utils.adapter import adapter_config, ContextAdapter
-
-@adapter_config(name='etc', context=ISiteRoot, provides=ITraversable)
-class SiteRootEtcTraverser(ContextAdapter):
- """Site root ++etc++ namespace traverser"""
-
- def traverse(self, name, furtherpath=None):
- if name == 'site':
- return self.context.getSiteManager()
- raise NotFound
-
By using an URL like ‘++etc++site’ on your site root, you can then get access to your local site manager.
-argument is not mandatory for the namespace traverser. If it is not provided, the traverse method is called with -an empty string (with is a default adapter name) as first argument.
-Several PyAMS components use custom traversal adapters. For example, getting thumbnails from an image is done -through a traversing adapter, which results in nicer URLs than when using classic URLs with arguments…
-