[Zope] Why doesn't this work?
Dylan Reinhardt
zope@dylanreinhardt.com
29 Jul 2003 07:57:56 -0700
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 )