[Grok-dev] Adapter order/overriding/"inheritance"
Matthias
nitro at dr-code.org
Fri Feb 18 13:45:43 EST 2011
Hello,
here's a somewhat fundamental question about using adapters. I'll
illustrate it with a quick example:
class PreferredLangugageAdapter(grok.Adapter):
grok.context(IHTTPRequest)
grok.implements(IUserPreferredLanguages)
def getPreferredLanguages(self):
default = BrowserLanguages(self.context).getPreferredLanguages()
if some_condition:
return default
return []
This adapter overrides the default adapter for (IHTTPRequest,
IUserPreferredLanguages) in zope.publication.browser. Now in some cases I
want to return the value returned by the adapter I override (the "default"
in the example).
The code above works, but it relies on the fact that I know which adapter
I am overriding (the BrowserLanguages adapter). Wouldn't it make sense if
I could do something like
default = grok.superAdapter(self).getPreferredLanguages()
I am not familiar enough with the zca to see if this makes sense at all or
if there's already something built-in to solve this problem. There was
also the recent postings by sylvain/j-w and those subscription adapters
which can work like a "filter chain". That's basically what my example
above is doing, too.
Any hints if this pattern is common/good and what people typically do to
implement it?
-Matthias
More information about the Grok-dev
mailing list