[z3-checkins] r9615 - in z3/Five/trunk: . tests tests/products/FiveTest

dreamcatcher at codespeak.net dreamcatcher at codespeak.net
Thu Mar 3 20:08:01 MET 2005


Author: dreamcatcher
Date: Thu Mar  3 20:08:01 2005
New Revision: 9615

Added:
   z3/Five/trunk/makefile.in
      - copied unchanged from r9614, z3/Five/branch/dc-traversal-issue/makefile.in
   z3/Five/trunk/tests/products/FiveTest/tales_traversal.pt   (props changed)
      - copied unchanged from r9614, z3/Five/branch/dc-traversal-issue/tests/products/FiveTest/tales_traversal.pt
Modified:
   z3/Five/trunk/tests/test_five.py
   z3/Five/trunk/traversable.py
Log:
Merge dc-traversal-issue, now that Zope 2.7.4 is out and kicking.
A fix has been checked in and is present in Zope 2.7.4 to detect AttributeError on __bobo_traverse__ and behave accordingly.


Modified: z3/Five/trunk/tests/test_five.py
==============================================================================
--- z3/Five/trunk/tests/test_five.py	(original)
+++ z3/Five/trunk/tests/test_five.py	Thu Mar  3 20:08:01 2005
@@ -237,9 +237,9 @@
             view = self.folder.unrestrictedTraverse(base % macro)
         self.failUnless(view)
 
-    def test_ignore_new_style_class(self):
-        view = self.folder.unrestrictedTraverse('testoid/@@invalid_page')
-        self.assertEquals(view, None)
+    def test_unrestrictedTraverse_non_existing(self):
+        self.assertRaises(AttributeError, self.folder.unrestrictedTraverse,
+                          'testoid/@@invalid_page')
 
     def test_get_widgets_for_schema_fields(self):
         salutation = Choice(title=u'Salutation', values=("Mr.", "Mrs.", "Captain", "Don"))
@@ -278,6 +278,10 @@
             self.assertEquals("No docstring", response.getBody())
 
     def test_fallback_raises_notfound(self):
+        # If we return None in __fallback_traverse__, this test passes
+        # but for the wrong reason: None doesn't have a docstring so
+        # BaseRequest raises NotFoundError. A functional test would be
+        # perfect here.
         response = self.publish('/test_folder_1_/testoid/doesntexist')
         self.assertEquals(404, response.getStatus())
 

Modified: z3/Five/trunk/traversable.py
==============================================================================
--- z3/Five/trunk/traversable.py	(original)
+++ z3/Five/trunk/traversable.py	Thu Mar  3 20:08:01 2005
@@ -46,7 +46,7 @@
     """
     if getattr(thread_local, 'interaction', None) is None:
         thread_local.interaction = getSecurityManager()
-        
+
 class Traversable:
     """A mixin to make an object traversable using an ITraverser adapter.
     """
@@ -58,10 +58,10 @@
         This method is called by __bobo_traverse___ when Zope3-style
         ITraverser traversal fails.
 
-        By default, we return None. This should be enough
-        as far as Zope 2 is concerned to trigger acquisition.
+        Just raise a AttributeError to indicate traversal has failed
+        and let Zope do it's job.
         """
-        return None
+        raise AttributeError, name
 
     def __bobo_traverse__(self, REQUEST, name):
         """Hook for Zope 2 traversal
@@ -111,4 +111,3 @@
             pass
         # If a view can't be found, then use default traversable
         return super(FiveTraversable, self).traverse(name, furtherPath)
-


More information about the z3-checkins mailing list