[Repoze-checkins] r1231 - in repoze.bfg/trunk: . repoze/bfg repoze/bfg/tests
Chris McDonough
chrism at agendaless.com
Fri Jul 4 16:00:59 EDT 2008
Author: Chris McDonough <chrism at agendaless.com>
Date: Fri Jul 4 16:00:59 2008
New Revision: 1231
Log:
Depend on zope.component
Use an adapter to perform traversal.
Modified:
repoze.bfg/trunk/repoze/bfg/interfaces.py
repoze.bfg/trunk/repoze/bfg/policy.py
repoze.bfg/trunk/repoze/bfg/tests/test_policy.py
repoze.bfg/trunk/setup.py
Modified: repoze.bfg/trunk/repoze/bfg/interfaces.py
==============================================================================
--- repoze.bfg/trunk/repoze/bfg/interfaces.py (original)
+++ repoze.bfg/trunk/repoze/bfg/interfaces.py Fri Jul 4 16:00:59 2008
@@ -4,7 +4,14 @@
def __call__(environ, start_response):
""" Represent a WSGI (PEP 333) application """
-class IPolicy(Interface):
- def __call__(root, environ):
+class ITraversalPolicy(Interface):
+ def __call__(environ, root):
""" Return a tuple in the form (context, name, subpath) """
+class ITraverser(Interface):
+ def __init__(context):
+ """ Accept a context """
+
+ def __call__(environ, name):
+ """ Return a subcontext or based on name """
+
Modified: repoze.bfg/trunk/repoze/bfg/policy.py
==============================================================================
--- repoze.bfg/trunk/repoze/bfg/policy.py (original)
+++ repoze.bfg/trunk/repoze/bfg/policy.py Fri Jul 4 16:00:59 2008
@@ -2,7 +2,8 @@
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 @@
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)
Modified: repoze.bfg/trunk/repoze/bfg/tests/test_policy.py
==============================================================================
--- repoze.bfg/trunk/repoze/bfg/tests/test_policy.py (original)
+++ repoze.bfg/trunk/repoze/bfg/tests/test_policy.py Fri Jul 4 16:00:59 2008
@@ -1,5 +1,7 @@
import unittest
+from zope.component.testing import PlacelessSetup
+
class SplitPathTests(unittest.TestCase):
def _getFUT(self):
from repoze.bfg.policy import split_path
@@ -25,25 +27,35 @@
f = self._getFUT()
self.assertEqual(f('/foo/space%20thing/bar'), ['foo', 'space thing',
'bar'])
-
-class NaivePolicyTests(unittest.TestCase):
+
+class NaivePolicyTests(unittest.TestCase, PlacelessSetup):
+ def setUp(self):
+ PlacelessSetup.setUp(self)
+
+ def tearDown(self):
+ PlacelessSetup.tearDown(self)
+
def _getTargetClass(self):
- from repoze.bfg.policy import NaivePolicy
- return NaivePolicy
+ from repoze.bfg.policy import NaiveTraversalPolicy
+ return NaiveTraversalPolicy
def _makeOne(self, *arg, **kw):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import ITraverser
+ gsm.registerAdapter(DummyTraverser, (None,), ITraverser, '')
klass = self._getTargetClass()
return klass(*arg, **kw)
def test_class_conforms_to_IPolicy(self):
from zope.interface.verify import verifyClass
- from repoze.bfg.interfaces import IPolicy
- verifyClass(IPolicy, self._getTargetClass())
+ from repoze.bfg.interfaces import ITraversalPolicy
+ verifyClass(ITraversalPolicy, self._getTargetClass())
def test_instance_conforms_to_IPolicy(self):
from zope.interface.verify import verifyObject
- from repoze.bfg.interfaces import IPolicy
- verifyObject(IPolicy, self._makeOne())
+ from repoze.bfg.interfaces import ITraversalPolicy
+ verifyObject(ITraversalPolicy, self._makeOne())
def test_call_nonkeyerror_raises(self):
policy = self._makeOne()
@@ -92,3 +104,12 @@
raise KeyError, name
return self.next
+class DummyTraverser:
+ def __init__(self, context):
+ self.context = context
+
+ def __call__(self, environ, name):
+ try:
+ return self.context[name]
+ except KeyError:
+ return None
Modified: repoze.bfg/trunk/setup.py
==============================================================================
--- repoze.bfg/trunk/setup.py (original)
+++ repoze.bfg/trunk/setup.py Fri Jul 4 16:00:59 2008
@@ -48,8 +48,8 @@
include_package_data=True,
namespace_packages=['repoze', 'repoze.bfg'],
zip_safe=False,
- tests_require = ['zope.interface'],
- install_requires=['zope.interface'],
+ tests_require = ['zope.interface', 'zope.component', 'zope.testing'],
+ install_requires=['zope.interface', 'zope.component', 'zope.testing'],
test_suite="repoze.bfg.tests",
entry_points = """\
"""
More information about the Repoze-checkins
mailing list