[Zope-dev] Re: unregistering components?

Philipp von Weitershausen philipp at weitershausen.de
Mon Nov 26 12:57:48 EST 2007


On 26 Nov 2007, at 18:17 , Chris Withers wrote:
> Philipp von Weitershausen wrote:
>>>> Yes. It returns the one and only global registry.
>>>
>>> Am I right in thinking the global registry is _only_ used if no  
>>> context is supplied?
>> No. One should never have to supply an explicit context.
>
> Surely that's only the case if you're using zope's traversal stuff?

Yup.

> I'm guessing that if you are, you either need to stick with the one  
> global registry or manage either ISites or IComponentLookup's  
> yourself?

Not sure what you mean by "if you are".

>>>>> If so, how come it's not called getGlobalComponentRegistry?
>>>>
>>>> Because component registries used to be called site managers and  
>>>> we can't just change the API at this point anymore.
>>>
>>> Well, getGlobalComponentRegistry could be added as an alternate  
>>> spelling and people could be encouraged to use it ;-)
>> Feel free to submit a patch :)
>
> It's entertaining to get asked to submit a patch *and* told you're  
> not doing anything that belongs on the -dev list in the same email ;-)

Touche ;)

>>> There seems to be comments suggesting getSiteManager is  
>>> deprecated, but maybe I'm not getting exactly what is being  
>>> deprecated...
>> It's not deprecated at all. If it were, it would say so in the code  
>> and emit a deprecation warning when you try to use it.
>
> What's line 37 of component._api on about then?

# SiteManager API. This needs to get deprecated eventually.

It says *eventually*  :)

>>> and by "Site" you mean "something implementing IComponentRegistry"?
>> No, something implementing ISite, which defines a setSiteManager  
>> and getSiteManager for setting and retrieving an IComponentRegistry.
>
> Are you sure you don't mean ISiteManager, which is marked as being  
> deprecated and to be removed in 2007...

Yes, I'm sure I mean ISite.

> If you mean a different ISite, where is it defined?

zope.app.component.interfaces. Well, it moved to  
zope.location.interfaces recently in order to reduce the amount of  
interdependencies between the eggs, but it's still available w/o  
deprecation from zope.app.component.interfaces.

> (and I'm guessing there is an ISite somewhere, as I could find no  
> definition of setSiteManager, but how does IComponentArchitecture's  
> getSiteManager relate to that of ISite?)

zope.component.getSiteManager() will return whichever component  
registry is active.  site.getSiteManager() will return the local  
component registry that has been associated with site (which provides  
ISite).

>>> I'm guessing the adapter to IComponentLookup is what implements  
>>> the search up the object graph to find an IComponentRegistry?
>> Yes, but that's rarely used (only when you pass an explicit context  
>> which we almost never do).
>
> I think I'm misreading the code in _api then. It looks to me that  
> most things use getSiteManager (even though the comment says it  
> needs to be deprecated) which always appears to return either the  
> global registry or do an IComponentLookup adaptation. If no explicit  
> context is supplied, how does anything other than the global  
> registry end up getting used?

getSiteManager is "overloaded" from zope.app.component. See hooks.py.  
Yay for indirection :).

>> Normally, during traversal, an event subscriber reacts to ISites  
>> being traversed and remembers the site's component registry in a  
>> thread-local variable. getSiteManager() will then return whatever  
>> is in the thread-local variable, and therefore getUtility,  
>> getMultiAdapter, etc., will use that local registry.
>>> If so, where do I find that adapter implementation(s)?
>> See zope.app.component (also for the subscriber stuff mentioned  
>> above).
>
> I spent quite a while looking and didn't spot them. Where exactly?

A quick look through zope.app.component/configure.zcml reveals that  
the subscriber is in site.py. The rest of the machinery is in hooks.py.

> (also bear in mind that I don't really want to use any of zope.app...)

Fair enough.

>>> ...however, I'm interested in the mechanics of how zope.component  
>>> handles multiple component registries, in particular how  
>>> registries are added to and removed from the set of registries  
>>> that are searched hen looking for a component and some other bits  
>>> and pieces.
>> Which is the *use* of Zope, not the *development* of Zope.
>
> I'm not really sure why you're quibling over this but I'm quite  
> happy to move this discussion to zope3-users if you're prefer and  
> then move it back to zope-dev if it turns out I need to do  
> *development* of Zope (such as the patch you requested above ;-) )

I guess I'm nitpicking. I would just like to stress the focus of the  
zope-dev list. And regarding the patch, I've encouraged people to  
submit patches on zope3-users before, too ;).



More information about the Zope-Dev mailing list