Re: [Zope] Why doesn't this work?
On Monday 28 July 2003 08:01 pm, Dylan Reinhardt wrote:
On Mon, 2003-07-28 at 19:05, Terry Hancock wrote:
On Monday 28 July 2003 02:41 pm, Dylan Reinhardt wrote:
Globals.InitializeClass(MyContainer)
Hey, that works!
Glad to hear that helped. I didn't have a second guess. :-)
Actually, though going to using __bobo_traverse__ introduces a bizarre new wrinkle to the problem. If you access the object (in DTML) as: Normal HTTP request (i.e. just put it in the HTML): """ <a href="MyContainer/Green">Link to Green wrapper object.</a> """ that works (with __bobo_traverse__ defined). And if you define an accessor method like the "get_obj" method I defined, you can call the object using it: """ <dtml-var expr="restrictedTraverse('MyContainer').get_obj('Green').index_html()"
""" that works. BUT """ <dtml-var expr="restrictedTraverse('MyContainer/Green').index_html()"
""" DOES NOT work! You get the authentication failure, just as I did in the case I posted earlier. This is with __bobo_traverse__ doing basically the same thing that get_obj() did in my example (you have to change the arguments around, because it expects this calling profile: def __bobo_traverse__(self, REQUEST=None, name=None): "Traversal hook" # your code here return acquisition_wrapped_object I can of course avoid calling it this way (it's not hard to restrict myself to using restrictedTraverse on the "real" object), but it is very weird. I remember from when I first started poking around with this that I discovered that restrictedTraverse uses a "fake request", and I now think that must be at the heart of the matter. But I still don't understand it. I had been thinking that it was ultimately because of the problem of returning the dynamically created wrapper object, which is why I wrote the PBTest product to separate that problem out. But apparently that's not it, since (after applying your help) that part works okay. Any thoughts on this? Cheers, Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com
You're probably returning an unwrapped object in __bobo_traverse__ Try this: ------------------- def __bobo_traverse(self, request, name): if name in ("Red", "Green", "Blue"): return PB_Object(name).__of__(self) ------------------- HTH, Dylan On Mon, 2003-07-28 at 22:58, Terry Hancock wrote:
On Monday 28 July 2003 08:01 pm, Dylan Reinhardt wrote:
On Mon, 2003-07-28 at 19:05, Terry Hancock wrote:
On Monday 28 July 2003 02:41 pm, Dylan Reinhardt wrote:
Globals.InitializeClass(MyContainer)
Hey, that works!
Glad to hear that helped. I didn't have a second guess. :-)
Actually, though going to using __bobo_traverse__ introduces a bizarre new wrinkle to the problem. If you access the object (in DTML) as:
Normal HTTP request (i.e. just put it in the HTML): """ <a href="MyContainer/Green">Link to Green wrapper object.</a> """ that works (with __bobo_traverse__ defined).
And if you define an accessor method like the "get_obj" method I defined, you can call the object using it: """ <dtml-var expr="restrictedTraverse('MyContainer').get_obj('Green').index_html()"
""" that works.
BUT """ <dtml-var expr="restrictedTraverse('MyContainer/Green').index_html()"
""" DOES NOT work!
You get the authentication failure, just as I did in the case I posted earlier. This is with __bobo_traverse__ doing basically the same thing that get_obj() did in my example (you have to change the arguments around, because it expects this calling profile:
def __bobo_traverse__(self, REQUEST=None, name=None): "Traversal hook" # your code here return acquisition_wrapped_object
I can of course avoid calling it this way (it's not hard to restrict myself to using restrictedTraverse on the "real" object), but it is very weird. I remember from when I first started poking around with this that I discovered that restrictedTraverse uses a "fake request", and I now think that must be at the heart of the matter. But I still don't understand it.
I had been thinking that it was ultimately because of the problem of returning the dynamically created wrapper object, which is why I wrote the PBTest product to separate that problem out. But apparently that's not it, since (after applying your help) that part works okay.
Any thoughts on this?
Cheers, Terry
-- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com
_______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
On Tuesday 29 July 2003 07:57 am, Dylan Reinhardt wrote:
You're probably returning an unwrapped object in __bobo_traverse__
Try this: -------------------
def __bobo_traverse(self, request, name): if name in ("Red", "Green", "Blue"): return PB_Object(name).__of__(self) -------------------
Nope, I'm using the .__of__(self) code. It looks much like your example. Could be something else going wrong inside it, though. I'll keep exploring. If I can't get it to work, I'll try to create an isolated demonstration as before. Thanks. ;-) Terry -- Terry Hancock ( hancock at anansispaceworks.com ) Anansi Spaceworks http://www.anansispaceworks.com
participants (2)
-
Dylan Reinhardt -
Terry Hancock