[Grok-dev] Re: distinction between adapts() and context()

Philipp von Weitershausen philipp at weitershausen.de
Thu Mar 20 17:11:02 EDT 2008

Martijn Faassen wrote:
> Philipp von Weitershausen wrote:
>> Brandon Craig Rhodes wrote:
>>> Why does the AdapterGrokker() in grok/meta.py look only for a
>>> grok.context() declaration on an adapter, and not pay any attention to
>>> native Zope .adapts() information on the class?
>> Mostly because of symmetry. 'grok.context' always specifies what kind 
>> of an object 'self.context' will be, on both views, adapters, etc.
>>> I think it would be
>>> nice if it accepted either directive, but I wanted to ask and find out
>>> if it was omitted on purpose for some reason I'm not thinking of this
>>> late at night. :-)
>> I suppose it could *also* allow z.c.adapts() if it can't find a 
>> grok.context() directive.
> And give an error if it finds both.
> I'd be +1 on the following behavior:
> * also accept grok.adapts(), just like we accept it with MultiAdapter 
> (we do, right?)

Right. We actually *require* it on MultiAdapter.

> * if grok.context() and grok.adapts() are both present, Grok will refuse 
> to guess and the grokking process stops with a GrokError.


> Note that I think this means that you could use grok.Adapter as a 
> multi-adapter too then: you'd just have to write your own __init__ (just 
> as for MultiAdapter). Hmm... We could consider disallowing grok.adapts() 
> to have more than one argument on plain adapters for now. We could 
> consider getting more permissive in the future and let grok.Adapter take 
> on the role of grok.MultiAdapter too, but I think we should one step at 
> the time for this.

Agreed. +1 for allowing just one argument to adapts() inside Adapter.

> I wonder whether this should then also be supported for View - i.e. you 
> can either use grok.context or explicitly point to context object and 
> request both. What about viewlets? I'd say let's explictly *not* support 
> grok.adapts on the view stuff, at least until someone can make a good 
> case to do so. I'd be +1 for a change that makes this explicit and 
> always bails out with an error if it finds adapts() on a view or viewlet.


More information about the Grok-dev mailing list