[Zope-Checkins] SVN: Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/ Remove fallback on __bobo_traverse__ failure, as discussed with Chris McDonough.

Sidnei da Silva sidnei at awkly.org
Wed Oct 6 15:16:20 EDT 2004


Log message for revision 27773:
  Remove fallback on __bobo_traverse__ failure, as discussed with Chris McDonough.


Changed:
  U   Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/BaseRequest.py
  U   Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/tests/testBaseRequest.py


-=-
Modified: Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/BaseRequest.py
===================================================================
--- Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/BaseRequest.py	2004-10-06 08:40:56 UTC (rev 27772)
+++ Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/BaseRequest.py	2004-10-06 19:16:20 UTC (rev 27773)
@@ -308,19 +308,20 @@
                           "Object name begins with an underscore at: %s" % URL)
                     else: return response.forbiddenError(entry_name)
 
-                bobo_got = 0
-                try:
-                    if hasattr(object,'__bobo_traverse__'):
+                if hasattr(object,'__bobo_traverse__'):
+                    try:
                         subobject=object.__bobo_traverse__(request,entry_name)
-                        bobo_got = 1
                         if type(subobject) is type(()) and len(subobject) > 1:
                             # Add additional parents into the path
                             parents[-1:] = list(subobject[:-1])
                             object, subobject = subobject[-2:]
-                except (AttributeError, KeyError):
-                    pass
-
-                if not bobo_got:
+                    except (AttributeError, KeyError):
+                        if debug_mode:
+                            return response.debugError(
+                                "Cannot locate object at: %s" % URL)
+                        else:
+                            return response.notFoundError(URL)
+                else:
                     try:
                         # Note - no_acquire_flag is necessary to support
                         # things like DAV.  We have to make sure

Modified: Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/tests/testBaseRequest.py
===================================================================
--- Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/tests/testBaseRequest.py	2004-10-06 08:40:56 UTC (rev 27772)
+++ Zope/branches/dc-bobo_traverse-branch/lib/python/ZPublisher/tests/testBaseRequest.py	2004-10-06 19:16:20 UTC (rev 27773)
@@ -50,17 +50,6 @@
     def __bobo_traverse__(self, REQUEST, name):
         raise AttributeError, name
 
-    def dummyMethod(self):
-        """Dummy method with docstring."""
-        return 'Dummy Value'
-
-    def __getitem__(self, name):
-        if name.startswith('no_key_'):
-            raise KeyError, name
-        name = name.replace('key_', '')
-        return getattr(self, name)
-
-
 class DummyObjectWithBD(DummyObjectBasic):
     """Dummy class with docstring."""
 
@@ -75,7 +64,7 @@
     """Dummy class with docstring."""
 
     def __bobo_traverse__(self, REQUEST, name):
-        if name == self.default_path[0]:
+        if name == self._default_path[0]:
             return getattr(self, name)
         raise AttributeError, name
 
@@ -165,28 +154,6 @@
         r = self.makeBaseRequest()
         self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBBT/bbt_foo')
 
-    def test_traverse_withBBT_fallback_getattr(self):
-        # Test that if __bobo_traverse__ raises AttributeError
-        # that we fallback to getattr()
-        r = self.makeBaseRequest()
-        r.traverse('folder/objWithBBT/dummyMethod')
-        self.assertEqual(r.URL, '/folder/objWithBBT/dummyMethod')
-
-    def test_traverse_withBBT_fallback_getitem(self):
-        # Test that if __bobo_traverse__ raises AttributeError
-        # and getattr raises AttributeError
-        # that we fallback to __getitem__
-        r = self.makeBaseRequest()
-        r.traverse('folder/objWithBBT/key_dummyMethod')
-        self.assertEqual(r.URL, '/folder/objWithBBT/key_dummyMethod')
-
-    def test_traverse_withBBT_fallback_getitem_NotFound(self):
-        # Test that if all else fails, we get a NotFound
-        from ZPublisher import NotFound
-        r = self.makeBaseRequest()
-        self.failUnlessRaises(NotFound, r.traverse,
-                              'folder/objWithBBT/no_key_dummyMethod')
-
     def test_traverse_withBDBBT(self):
         # Test for an object which has a __browser_default__
         # and __bobo_traverse__
@@ -202,7 +169,6 @@
         # Test for an object which has a __browser_default__
         # and __bobo_traverse__
         # __bobo_traverse__ should raise an AttributeError, which will
-        # end up falling back to getattr, then __getitem__ to finally
         # raise a NotFound
         from ZPublisher import NotFound
         r = self.makeBaseRequest()



More information about the Zope-Checkins mailing list