From 8f88693600edebb522b6d078691e72a0dcbdb287 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Fri, 4 Jul 2008 20:00:59 +0000 Subject: Depend on zope.component Use an adapter to perform traversal. --- repoze/bfg/policy.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'repoze/bfg/policy.py') diff --git a/repoze/bfg/policy.py b/repoze/bfg/policy.py index a25da9efd..697350b16 100644 --- a/repoze/bfg/policy.py +++ b/repoze/bfg/policy.py @@ -2,7 +2,8 @@ import urllib from zope.interface import implements -from repoze.bfg.interfaces import IPolicy +from repoze.bfg.interfaces import ITraversalPolicy +from repoze.bfg.interfaces import ITraverser def split_path(path): if path.startswith('/'): @@ -20,26 +21,27 @@ def split_path(path): clean.append(item) return clean -class NaivePolicy: - - implements(IPolicy) +class NaiveTraversalPolicy: + implements(ITraversalPolicy) def __call__(self, environ, root): path = split_path(environ['PATH_INFO']) ob = root name = '' + while path: element = pop(path) - try: - ob = ob[element] - except KeyError: + traverser = ITraverser(ob) + next = traverser(environ, element) + if next is None: if path: name = pop(path) break - + ob = next + return ob, name, path - + def pop(path): return path.pop(0) -- cgit v1.2.3