summaryrefslogtreecommitdiff
path: root/repoze/bfg/traversal.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-20 03:04:58 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-20 03:04:58 +0000
commitbb5d643b83cde30d2fa37aaae21a8d4b225f584b (patch)
treebbfc266fb1161dc6189a1d25f93903ca378373e1 /repoze/bfg/traversal.py
parent6c840ed454d91741273984bcbf9a32404a78a2c1 (diff)
downloadpyramid-bb5d643b83cde30d2fa37aaae21a8d4b225f584b.tar.gz
pyramid-bb5d643b83cde30d2fa37aaae21a8d4b225f584b.tar.bz2
pyramid-bb5d643b83cde30d2fa37aaae21a8d4b225f584b.zip
- Add find_interface API.
Diffstat (limited to 'repoze/bfg/traversal.py')
-rw-r--r--repoze/bfg/traversal.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index a9f127841..ee66ae887 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -3,6 +3,7 @@ import urllib
from zope.interface import classProvides
from zope.interface import implements
from zope.location.location import located
+from zope.location.location import LocationIterator
from zope.location.interfaces import ILocation
from repoze.bfg.interfaces import ITraverser
@@ -63,3 +64,10 @@ class NaiveTraverser(object):
return ob, name, path
+def find_interface(context, interface):
+ """ Return an object providing 'interface' anywhere in the parent
+ chain of 'context' or None if no object providing that interface
+ can be found in the parent chain """
+ for location in LocationIterator(context):
+ if interface.providedBy(location):
+ return location