|
traversal bug with OFS.Application.Application: msg#00013web.zope.z3base.five
After upgrading to Zope 2.9.2 from 2.9.0 I found that one my applications wasn't working anymore. It depended on being able to bind a page template to OFS.Application.Application and through some examination I found a small bug in the traversal fallback changes that were made recently. It basically boils down to OFS.Application.Application's __bobo_traverse__ raises NotFound when there is a valid REQUEST. I've attached a unit test that demonstrates the problem and also the small patch which fixes it. PS. There are two questions I had for more experienced testers on this list: 1. Why does http() return 404 but then actually return the correct content in the test case I added? 2. Why must I use zope2.View instead of zope2.Public. If I use zope2.Public I get authentication errors? -- Jordan Baker (jbb@xxxxxxxxxxxxx) =================================================================== Index: browser/tests/test_traversable.py =================================================================== --- browser/tests/test_traversable.py (revision 66357) +++ browser/tests/test_traversable.py (working copy) @@ -258,7 +258,46 @@ >>> tearDown() """ +def test_traverse_ofs_application(): + """ + Test for Five fallback when traversing OFS.Application.Application. + In Zope 2.9.2 OFS.Application.Application.__bobo_traverse__ raises NotFound when it has a REQUEST and so its impossible to use Five traversal with it. + Set up: + + + >>> from zope.app.testing.placelesssetup import setUp, tearDown + >>> setUp() + + >>> configure_zcml = ''' + ... <configure xmlns="http://namespaces.zope.org/zope" + ... xmlns:five="http://namespaces.zope.org/five" + ... xmlns:browser="http://namespaces.zope.org/browser"> + ... <five:traversable class="OFS.Application.Application"/> + ... <browser:page for="*" name="hello.html" template="browser/tests/falcon.pt" permission="zope2.View"/> + ... </configure>''' + + >>> import Products.Five + >>> from Products.Five import zcml + >>> zcml.load_config('configure.zcml', Products.Five) + >>> zcml.load_string(configure_zcml) + + >>> print http(r''' + ... GET /hello.html HTTP/1.1 + ... + ... ''') + HTTP/1.1 404 Not Found + Content-Length: 35 + Content-Type: text/html; charset=iso-8859-15 + <BLANKLINE> + <p>The falcon has taken flight</p> + <BLANKLINE> + + Clean up: + + >>> tearDown() + """ + def test_suite(): from Testing.ZopeTestCase import FunctionalDocTestSuite return FunctionalDocTestSuite() Index: traversable.py =================================================================== --- traversable.py (revision 66357) +++ traversable.py (working copy) @@ -61,7 +61,7 @@ if hasattr(self, '__fallback_traverse__'): try: return self.__fallback_traverse__(REQUEST, name) - except (AttributeError, KeyError): + except (NotFound, AttributeError, KeyError): pass else: try: |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: SqlAlchemy thru Five: 00013, David Pratt |
|---|---|
| Next by Date: | What from zope.app are you using: 00013, Philipp von Weitershausen |
| Previous by Thread: | SqlAlchemy thru Fivei: 00013, David Pratt |
| Next by Thread: | Re: traversal bug with OFS.Application.Application: 00013, Philipp von Weitershausen |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |