[TransWarp] State of Transwarp
Steve Alexander
steve at cat-box.net
Wed Jun 12 18:17:01 EDT 2002
Phillip J. Eby wrote:
>
> Recent work on Zope 3 has evolved the state-of-the-art
> in Python "proxy" objects, and Zope 3 implements security proxies
> already. What I'm curious about is how well non-security-related
> proxies would play in the Zope 3 model, since a lot of Zope code
> requests the removal of proxies in order to inspect objects or to bypass
> security. Obviously, that's not a JAC problem; it's just something I'm
> curious about in the Z3 architecture.
Most of the total unwrapping that goes on in Zope 3 happens to objects
that represent Elements: the "data" or "business" objects of the
application.
One case when they are always unwrapped is before being added to a
persistent container.
There are two kinds of proxies in Zope 3: context wrappers and security
proxies. Jim has a vision of security proxies only being used where
absolutely necessary, so with any luck, there will be a body of trusted
code where you won't see many security proxies.
Context wrappers are used to record the traversal path to an object so
that service lookups can follow that path back. In certain cases, a
context wrapper needs to rebind the "self" of a method call to be the
contextwrapper rather then the original self. This rebinding could be
considered a pointcut operation. It is implemented conditionally on the
type of the attribute descriptor.
See
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope.ContextWrapper.ContextMethod
Methods that strip off the proxies of an object usually also keep around
the original wrapped object, because they need the services of security
wrappers or context wrappers. The unwrapped object is only used where
we're sure we want an unwrapped object.
I think that a pointcut wrapper would work well enough with Zope 3. The
ContextWrapper implementation is designed to be subclassed, and in fact
has been to provide the method rebinding.
Of course, there are performance considerations for such method
rebinding. I'm pretty certain that TransWarp's fresh classes will
execute faster than subclasses of ContextWrapper implemented in Python.
The C implementation is pretty fast though.
--
Steve Alexander
More information about the PEAK
mailing list