Hi, I came across this trying to implement WebDAV support for some content in Zope 2.
The ZPublisher will always traverse to the return value from 'browserDefault()' (either from a custom IBrowserPublisher adapter, or the DefaultPublishTraverse object hardcoded in ZPublisher.BaseRequest) when it gets to the end of a traversal chain, even for WebDAV requests. This makes it impossible to e.g. get a folder listing in WebDAV. The default 'browserDefault()' will call __browser_default__() on the context if that exists. If not, it will call queryDefaultView(), which returns a view name as set by a <browser:defaultView /> directive, and return that name unless it is None. The publisher will then traverse to the name indicated. This breaks WebDAV in two ways: Consider a folder /foo/bar. The class for 'bar' does not implement __browser_default__(), but there is a default view, set with the <browser:defaultView /> directive, called 'index'. Let's say the WebDAV client attempts to do a PROPFIND request to list the folder's contents. The publisher will traverse to /foo/bar and then look up the default view, @@index, and attempt to traverse to that. This doesn't have the PROPFIND() verb method, obviously, since views don't derive from webdav.Resource, and so the WebDAV requests fails. Even if it does, there's some code at the end of BaseRequest.traverse() which checks that the last item in the traversal chain is *not* acquired (i.e. it's a genuine child of the aq_base'd second-to-last item). This is to allow PUT'ing to a name that could've been acquired (via the NullResource mechanism). This means that if you have registered a <browser:defaultView /> for an object, it is impossible for that object to participate in WebDAV requests. We never noticed in Plone before, because most Plone content implements __browser_default__ so that it delegates to PloneTool.browserDefault() which aborts immediately if it detects a WebDAV request. The default behaviour does *not* do this, however, and it seems wrong to expect everyone who implements __browser_default__ or an IBrowserPublisher adapter to have to do so. My suggestion would be that we simply skip the browserDefault() lookup for WebDAV requests. I don't think it's meaningful to have a browser-default page when looking at objects via WebDAV at all. I can make the change as a bugfix to 2.10, 2.11 and 2.12 if no-one objects. Martin _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )