On Sep 25, 2006, at 3:25 AM, Wolfgang Schnerring wrote:

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

* Jim Fulton <[EMAIL PROTECTED]> [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?

Yes, now that you mention it. Proxies should be as transparent as possible. As such, they shouldn't add additional attributes if they can avoid it. I think it's best to leave things as they are, with a comment pointing out that the difference is in the version of getProciedObject used.


Jim Fulton                      mailto:[EMAIL PROTECTED]                Python 
CTO                             (540) 361-1714                  
Zope Corporation        http://www.zope.com             http://www.zope.org

Zope3-dev mailing list
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to