[Zope-Checkins] SVN: Zope/trunk/src/ZPublisher/ - fixed handling of errors in 'traverseName'
Yvo Schubbe
y.2010 at wcm-solutions.de
Sat Apr 24 06:57:26 EDT 2010
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
More information about the Zope-Checkins
mailing list