Commit 836f07cf authored by Sidnei da Silva's avatar Sidnei da Silva

Remove fallback on __bobo_traverse__ failure, as discussed with Chris McDonough.

parent aa87b334
...@@ -308,19 +308,20 @@ class BaseRequest: ...@@ -308,19 +308,20 @@ class BaseRequest:
"Object name begins with an underscore at: %s" % URL) "Object name begins with an underscore at: %s" % URL)
else: return response.forbiddenError(entry_name) 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) subobject=object.__bobo_traverse__(request,entry_name)
bobo_got = 1
if type(subobject) is type(()) and len(subobject) > 1: if type(subobject) is type(()) and len(subobject) > 1:
# Add additional parents into the path # Add additional parents into the path
parents[-1:] = list(subobject[:-1]) parents[-1:] = list(subobject[:-1])
object, subobject = subobject[-2:] object, subobject = subobject[-2:]
except (AttributeError, KeyError): except (AttributeError, KeyError):
pass if debug_mode:
return response.debugError(
if not bobo_got: "Cannot locate object at: %s" % URL)
else:
return response.notFoundError(URL)
else:
try: try:
# Note - no_acquire_flag is necessary to support # Note - no_acquire_flag is necessary to support
# things like DAV. We have to make sure # things like DAV. We have to make sure
......
...@@ -50,17 +50,6 @@ class DummyObjectWithBBT(DummyObjectBasic): ...@@ -50,17 +50,6 @@ class DummyObjectWithBBT(DummyObjectBasic):
def __bobo_traverse__(self, REQUEST, name): def __bobo_traverse__(self, REQUEST, name):
raise AttributeError, 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): class DummyObjectWithBD(DummyObjectBasic):
"""Dummy class with docstring.""" """Dummy class with docstring."""
...@@ -75,7 +64,7 @@ class DummyObjectWithBDBBT(DummyObjectWithBD): ...@@ -75,7 +64,7 @@ class DummyObjectWithBDBBT(DummyObjectWithBD):
"""Dummy class with docstring.""" """Dummy class with docstring."""
def __bobo_traverse__(self, REQUEST, name): def __bobo_traverse__(self, REQUEST, name):
if name == self.default_path[0]: if name == self._default_path[0]:
return getattr(self, name) return getattr(self, name)
raise AttributeError, name raise AttributeError, name
...@@ -165,28 +154,6 @@ class TestBaseRequest(TestCase): ...@@ -165,28 +154,6 @@ class TestBaseRequest(TestCase):
r = self.makeBaseRequest() r = self.makeBaseRequest()
self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBBT/bbt_foo') 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): def test_traverse_withBDBBT(self):
# Test for an object which has a __browser_default__ # Test for an object which has a __browser_default__
# and __bobo_traverse__ # and __bobo_traverse__
...@@ -202,7 +169,6 @@ class TestBaseRequest(TestCase): ...@@ -202,7 +169,6 @@ class TestBaseRequest(TestCase):
# Test for an object which has a __browser_default__ # Test for an object which has a __browser_default__
# and __bobo_traverse__ # and __bobo_traverse__
# __bobo_traverse__ should raise an AttributeError, which will # __bobo_traverse__ should raise an AttributeError, which will
# end up falling back to getattr, then __getitem__ to finally
# raise a NotFound # raise a NotFound
from ZPublisher import NotFound from ZPublisher import NotFound
r = self.makeBaseRequest() r = self.makeBaseRequest()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment