- -
-

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…

-
- - -