And now we came to a bug description: I claim that absolute_url() method of the Traversable class has a bug, at least in Zope 2.4.1
The bug causes incorrect URL returned sometimes when a it is executed on an aquired object. For instance, if in object /F/O I evaluate self.container.absolute_url() what I get will depend on the request context:
if the requested url was: "http://site/F/something", then the URL returned in object O will be fine: "http://site/F"
if the requested url was: "http://site/F/SF/something", then the URL returned *might* be "http://site/F/SF/something/F".
*Might* here means that if the absolute_url() is executed in a Product class definition, it will go wrong, but if it is executed from a python script (like the one above), it will work fine. I suppose that has something to do to with the context (namespace) transfer to python scripts.
Finally, a fix: I'm far from well-understanding the change I made to the Zope code, but it works better for me now. I attach to this message a patch for Traversable.py file.
This patch appears to break the absolute_url method in many cases. It would be good if we could get a better description of the bug (a reproducable test case) so that we can follow up on this. Brian Lloyd brian@zope.com Software Engineer 540.361.1716 Zope Corporation http://www.zope.com