summaryrefslogtreecommitdiff
path: root/repoze/bfg/policy.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-04 20:00:59 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-04 20:00:59 +0000
commit8f88693600edebb522b6d078691e72a0dcbdb287 (patch)
treeb2171add39cce18f42085f88f84e9a2a6b42e542 /repoze/bfg/policy.py
parent8b2c67309a9a3f9cf709bf3003dc3275f17c709e (diff)
downloadpyramid-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.py20
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)