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

Reply via email to