[Zope3-dev] Re: Duplicated zope.decorator in zope.app.container

Wolfgang Schnerring wosc at wosc.de
Mon Sep 25 03:25:10 EDT 2006


[moving to the list because it might be of wider interest]

* Jim Fulton <jim at zope.com> [2006-09-22 07:27]:
> On Sep 22, 2006, at 4:23 AM, Wolfgang Schnerring wrote:
> >Hi Jim,
> >
> >Theuni and I refactored zope.decorator and put its contents into
> >zope.proxy and zope.security, respectively.
> >
> >The same code also exists in duplicate in
> >zope.app.container.contained, but (you know there's always a but ;-),
> >it refuses to let itself be removed: When I try to remove the
> >DecoratorSpecificationDescriptor from contained.py and import the
> >"new" one from zope.proxy.decorator instead, the tests break --
> >although the code of the duplicated decorator is exactly the same!
> >Theuni and I suspect that it might have something to do with the
> >ProxyBase C-module, but that's just a guess.
> >
> >Do you have any insights into this?
> 
> Ah, that explains the apparent, but not real duplication.  They use  
> different proxy methods.  This is quire intentional.  I remember now  
> that, for example, we don't want zope.proxy.getProciedObject, to peal  
> away container proxy.  The container proxies reuse zope.proxy C code  
> at the source level, rather than through inheritence to keep a  
> separate notion of proxiness.  Of course, that means that the  
> decorators use different proxy methods and are different even though  
> they have the same source.
> 
> You can't get rid of the separate decorators.  You could probably get  
> rid of the duplicated code by turning the different versions of  
> getProxiedObject into a class variables and making one set of  
> deecriptors inherit from the other.

I see. It is rather nasty to get different behaviour because of
differently imported global functions.
I do have the impression that getProxiedObject should be an instance
method of the proxy object, and not a global function -- this way, the
ContainedProxy could just override the method to do whatever it wants.
Then again, I know next to nothing about the whole proxying stuff. ;-)
Is there a reason getProxiedObject is a global function instead of an
instance method?

Wolfgang


More information about the Zope3-dev mailing list