[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 )