[Grok-dev] Querying the CA for grok'ed Views
Kevin Teague
kevin at bud.ca
Thu Mar 26 15:00:15 EDT 2009
I'm wondering if anyone has used the CA to query for Views to support
building navigational elements? Or has written any code for inspecting/
browsing the contents of the CA?
I'd like to be able to get a listing of all Views registered for a
particular interface or class. But I'm not sure how to do that. What I
have so far:
import grok
import zope.component
import zope.publisher.interfaces.browser
import zope.interface
class IViewiface(zope.interface.Interface):
pass
class Viewiface(grok.Application, grok.Container):
grok.implements(IViewiface)
class Index(grok.View):
def all(self):
gsm = zope.component.getGlobalSiteManager()
return gsm.adapters.lookupAll(
(
zope.interface.Interface,
zope.publisher.interfaces.browser.IDefaultBrowserLayer,
),
zope.interface.Interface
)
Which shows me that there is an assorted collection of generic Views
registered, but doesn't get me the 'index' View for Viewiface. If I
iterate through all adapters (using gsm._adapter_registrations) I see:
(<implementedBy viewiface.app.Viewiface>, <InterfaceClass
zope.publisher.interfaces.browser.IDefaultBrowserLayer>),
<InterfaceClass zope.interface.Interface>
But I can't figure out how to query the adapter registry for class
registrations (e.g. implementedBy). Is this possible?
Secondly, if I can query the adapter registry for a list of all Views
for Viewiface, I will want to filter that list down to just Grok Views
(e.g. adapting to grok.interfaces.IGrokView). It doesn't seem like
when a View is grokked that it registers the view as adapting to
IGrokView, but instead registers it for the generic
zope.interface.Interface. Is there a reason for this? Wouldn't it be
more accurate (and helpful) if it was registered for IGrokView?
Thirdly, if someone writes a kick-ass "CA browser" that showed you all
registrations and let you search for specific ones, and add it to
grokui.admin, that would be awesome :)
More information about the Grok-dev
mailing list