[Zope3-Users] Re: "dumping" a component registry

Philipp von Weitershausen philipp at weitershausen.de
Sat Sep 15 19:04:55 EDT 2007


Chris McDonough wrote:
> I'm having a bit of trouble debugging a failed browser view lookup.  It 
> has something to do with environment, because lookups for the view work 
> in one of my sandboxes, and fail in another, even though both seemingly 
> has the same ZCML and code.
> 
> Does anyone have any scripts already written that, say, at "zopectl run" 
> time dump the various component registries to a human-consumable format 
> so problems like this can be debugged more simply?

 >>> from zope.component import getSiteManager
 >>> reg = getSiteManager()
 >>> from pprint import pprint
 >>> for info in reg.registeredAdapters():
...     pprint((info.required, info.provided, info.factory, info.name))
...

This will probably drown you with information, though. One step would be 
to constrain the output only to browser views, in other words, 2-way 
multi-adapters whose second required interface is or extends 
IBrowserRequest:

 >>> from zope.publisher.interfaces.browser import IBrowserRequest
 >>> for info in reg.registeredAdapters():
...     if (len(info.required) == 2 and
...         info.required[1].isOrExtends(IBrowserRequest)):
...         pprint((info.required, info.provided, info.factory,
...                 info.name))
...

For better findability, you might want to search by name now. This is 
left up to the skilled reader as an exercise ;)


In my experience, failed adapter lookups are mostly due to

* configuration simply not getting loaded,

* things being registered for one thing but objects providing another 
(this can be especially confusing if the two things that are separate 
have similar or equal names, therefore making you believe they're the 
same. Python's "is" operator will do wonders).

* in case of browser views, missing layers applied to the request.

-- 
http://worldcookery.com -- Professional Zope documentation and training


More information about the Zope3-users mailing list