[Zope-dev] Put an adapted object in context

Santi Camps santi at zetadb.com
Thu Feb 12 17:10:46 EST 2004


> Santi Camps wrote:
> > My problem is that the adapter object, and also the adapted object
> > contained in it, are out of publisher context or something like this. 
> > For instance, absolute_url() methods doesn't work becouse REQUEST is not
> > defined.
> 
> I'm not sure I understand what you mean; I don't understand why your
> adapted object would become detached from the original context.
> 

It was a stupid question, I was applying the adapter before publishing
the object.  Now I apply the adapter in __bobo_traverse__ and its
beginning to run OK.

> It looks like you're losing acquisition context. You put an object into
> acquisition context explicitly. Something along these lines:

> import Acquisition
> 
> class MyAdapter(Acquisition.Explicit):
>    def __init__(self, context):
>        self.context = context
> 
> def getAdapter(context):
>    # create adapter for context, and wrap it explicitly in the acquisition
>    # context
>    return MyAdapter(context).__of__(context)
> 
> This works to give the adapter among other things a security context,
> so you can call methods on the adapter from a page template, for instance.
> You can also get to REQUEST and such, though in this case I used explicit
> acquisition so you'll have to use self.aq_acquire.REQUEST, if I recall
> the syntax correctly.
> 

Thats very interesting !!  I was rewriting __getattr__ to allow the
adapter access adapted object attributes, but doing this way its clear
and easier.  Inheriting from Acquisition Implicit and applying the
adapter using __of__ I obtain the same result and have less problems.  

> Regards,
> 
> Martijn
> 
> P.S. In the course of the coming weeks I'll be backporting parts of Zope 3's
> component architecture, especially adapters, into Zope 2. Contact me if 
> you're interested. I also expect I'll be making more noise about this in
> a few weeks.

Sure.  Now my little adapters systems is beginning to work fine, and I
will move my application this way.  I'm using a simple engine, a method
to define which adapters should be applied to each meta_type (this info
is stored in SESSION) and then this adapters are transparently applied
when accessing this kind of objects (writing some code in
__bobo_traverse__).  

-- 
Santi Camps
http://zetadb.sourceforge.net




More information about the Zope-Dev mailing list