Log message for revision 111339: - fixed handling of errors in 'traverseName'
Changed: UU Zope/trunk/src/ZPublisher/BaseRequest.py UU Zope/trunk/src/ZPublisher/tests/testBaseRequest.py -=- Modified: Zope/trunk/src/ZPublisher/BaseRequest.py =================================================================== --- Zope/trunk/src/ZPublisher/BaseRequest.py 2010-04-24 10:56:28 UTC (rev 111338) +++ Zope/trunk/src/ZPublisher/BaseRequest.py 2010-04-24 10:57:26 UTC (rev 111339) @@ -26,6 +26,7 @@ from zope.publisher.defaultview import queryDefaultViewName from zope.publisher.interfaces import EndRequestEvent from zope.publisher.interfaces import IPublishTraverse +from zope.publisher.interfaces import NotFound as ztkNotFound from zope.publisher.interfaces.browser import IBrowserPublisher from zope.traversing.interfaces import TraversalError from zope.traversing.namespace import nsParse, namespaceLookup @@ -312,7 +313,7 @@ __repr__=__str__ - + # Original version: see zope.traversing.publicationtraverse def traverseName(self, ob, name): if name and name[:1] in '@+': # Process URI segment parameters. @@ -321,7 +322,7 @@ try: ob2 = namespaceLookup(ns, nm, ob, self) except TraversalError: - raise KeyError(ob, name) + raise ztkNotFound(ob, name) if IAcquirer.providedBy(ob2): ob2 = ob2.__of__(ob) @@ -343,7 +344,6 @@ return ob2 - def traverse(self, path, response=None, validated_hook=None): """Traverse the object space @@ -506,7 +506,8 @@ object, check_name, subobject, self.roles) object = subobject - except (KeyError, AttributeError): + # traverseName() might raise ZTK's NotFound + except (KeyError, AttributeError, ztkNotFound): if response.debug_mode: return response.debugError( "Cannot locate object at: %s" % URL) @@ -517,7 +518,6 @@ return response.debugError(e.args) else: return response.forbiddenError(entry_name) - parents.append(object) Property changes on: Zope/trunk/src/ZPublisher/BaseRequest.py ___________________________________________________________________ Deleted: cvs2svn:cvs-rev - 1.56 Modified: Zope/trunk/src/ZPublisher/tests/testBaseRequest.py =================================================================== --- Zope/trunk/src/ZPublisher/tests/testBaseRequest.py 2010-04-24 10:56:28 UTC (rev 111338) +++ Zope/trunk/src/ZPublisher/tests/testBaseRequest.py 2010-04-24 10:57:26 UTC (rev 111339) @@ -1,5 +1,20 @@ import unittest +from zope.interface import implements +from zope.publisher.interfaces import IPublishTraverse +from zope.publisher.interfaces import NotFound as ztkNotFound + + +class DummyTraverser(object): + + implements(IPublishTraverse) + + def publishTraverse(self, request, name): + if name == 'dummy': + return 'dummy object' + raise ztkNotFound(self, name) + + class BaseRequest_factory: def _makeOne(self, root): @@ -138,6 +153,7 @@ return 'unpublishable' return DummyObjectWithEmptyDocstring() + class TestBaseRequest(unittest.TestCase, BaseRequest_factory): def _getTargetClass(self): @@ -372,13 +388,19 @@ def test_traverse_unsubscriptable(self): # See https://bugs.launchpad.net/bugs/213311 from ZPublisher import NotFound - class _Object(object): - pass - root = _Object() r = self._makeOne(None) self.assertRaises(NotFound, r.traverse, 'not_found') + def test_traverse_publishTraverse(self): + r = self._makeOne(DummyTraverser()) + self.assertEqual(r.traverse('dummy'), 'dummy object') + def test_traverse_publishTraverse_error(self): + from ZPublisher import NotFound + r = self._makeOne(DummyTraverser()) + self.assertRaises(NotFound, r.traverse, 'not_found') + + class TestBaseRequestZope3Views(unittest.TestCase, BaseRequest_factory): _dummy_interface = None Property changes on: Zope/trunk/src/ZPublisher/tests/testBaseRequest.py ___________________________________________________________________ Deleted: cvs2svn:cvs-rev - 1.5 Added: svn:keywords + Id _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins