diff options
| author | Chris McDonough <chrism@agendaless.com> | 2008-07-04 20:00:59 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2008-07-04 20:00:59 +0000 |
| commit | 8f88693600edebb522b6d078691e72a0dcbdb287 (patch) | |
| tree | b2171add39cce18f42085f88f84e9a2a6b42e542 /repoze/bfg/policy.py | |
| parent | 8b2c67309a9a3f9cf709bf3003dc3275f17c709e (diff) | |
| download | pyramid-8f88693600edebb522b6d078691e72a0dcbdb287.tar.gz pyramid-8f88693600edebb522b6d078691e72a0dcbdb287.tar.bz2 pyramid-8f88693600edebb522b6d078691e72a0dcbdb287.zip | |
Depend on zope.component
Use an adapter to perform traversal.
Diffstat (limited to 'repoze/bfg/policy.py')
| -rw-r--r-- | repoze/bfg/policy.py | 20 |
1 files changed, 11 insertions, 9 deletions
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) |
