[Zope3-Users] Pure python packages for zope.component and zope.interface

Darryl Cousins darryl at darrylcousins.net.nz
Sun Apr 20 00:06:50 EDT 2008

Jim wrote:

zope.proxy is harder. :(  What's especially sad is that the dependency  
on it is rather unimportant.  It is used by zope.deferredimport.  I  
was forced to use proxies because of annoying limitations in Python's  
module implementation and the inspect module's assumption that a  
module is not a module unless it subclasses the standard Python module  
type.  I expect though that a simpler proxy implementation could be  
used by deferredimport.  This would make zope.component depend on  
zope.proxy only if the annoying zcml is used.

On Sun, 2008-04-20 at 01:16 +0200, Martijn Faassen wrote:
> Hi there,
> Another high-level response. I actually *hope* that the port Zope
> packages to Jython project will be accepted for the Google Summer of
> Code. If it does, the python versions of this code will be given a
> good workout by the student, which should benefit other porting
> projects as well. cc-ing the student. Georgy, if you aren't aware yet,
> please check out this thread on zope3-users; it may have some
> interesting information for your project.

Thanks Martijn.

A little investigation shows me that Jim is correct.

1. zope.interface 'just works' as pure-python
2. zope.component depends on zope.proxy:
   a. in zcml.py. (I probably wouldn't be using zcml in my experiment)
   b. by its dependency on zope.deferredimport

If I have understood the code correctly in zope.deferredimport the
problem which zope.proxy.ProxyBase answers is in the following snippet
from z.deferredimport.deferredmodule:initialize [1] where a type(module)
comparison is made.

Therefore, if I could understand fully Jim's statement:

"the inspect module's assumption that a module is not a module unless it
subclasses the standard Python module type"

Then I could attempt to substitute pure-python code for the type(module)
problem which appears in the `initialize` method.


[1] zope.deferredimport.deferredmodule.py

def initialize(level=1):
    __name__ = sys._getframe(level).f_globals['__name__']
    module = sys.modules[__name__]
    if not (type(module) is ModuleProxy):
        module = ModuleProxy(module)
        sys.modules[__name__] = module

    if level == 1:
    return module

> Regards,
> Martijn

More information about the Zope3-users mailing list