hello,
today i ran into a problem with zope. i've wrote some base-classes in c++, using Boost.Python (www.boost.org) to export them into a python-module. the module (.pyd-file) works fine with my python-interpreter (v2.3.3). i can import it, instanciate objects of my c++-classes and use their methods successfully.
my module is aimed to extend one of my zope-products. in the current level of development, the module contains a first bunch of classes, which provide the basic functionality. so, i wanted to test my module not only with the commandline-interpreter of python, but in zope, as well. my setup runs zope v2.7.1 (win32, with python v2.3.3), which worked fine until today.
i've started to write a new zope-product, making my module useable in zope. in the initializer-script i tried to allow my module and the classes in it on the usual way:
<-- start: __init__.py -->
from Products.PythonScripts.Utility import allow_module, allow_class
allow_module("Products.ABPcWeb") allow_module("Products.ABPcWeb.ssl2du") <-- THE PYD FILE allow_class(PySslSet) <- allow_class(PySslEntry) | Classes in ssl2du.pyd allow_class(PyAccessSsl) | allow_class(PySslStatement) <-
__version__ = "0.01" __product_name__ = "ABPcWeb"
def initialize(context): pass
<-- end: __init__.py -->
the product is called 'ABPcWeb', and my .pyd 'ssl2du'. looks ok, i thought, but zope throws this error on startup:
<-- start: zope-error -->
Loading ABPcWeb ... ------ 2004-11-05T16:14:58 ERROR(200) Zope Could not import Products.ABPcWeb Traceback (most recent call last): File "C:\Program Files\Zope-2.7.1\lib\python\OFS\Application.py", line 660, in import_product product=__import__(pname, global_dict, global_dict, silly) File "C:\Zope-Instance\Products\ABPcWeb\__init__.py", line 8, in ? allow_class(PySslSet) File "C:\Program Files\Zope-2.7.1\lib\python\AccessControl\SecurityInfo.py", line 313, in allow_class sec.apply(Class) File "C:\Program Files\Zope-2.7.1\lib\python\AccessControl\SecurityInfo.py", line 165, in apply dict['%s__roles__' % name] = access TypeError: object does not support item assignment Traceback (most recent call last): File "C:\Program Files\Zope-2.7.1\lib\python\Zope\Startup\run.py", line 50, in ? run() File "C:\Program Files\Zope-2.7.1\lib\python\Zope\Startup\run.py", line 19, in run start_zope(opts.configroot) File "C:\Program Files\Zope-2.7.1\lib\python\Zope\Startup\__init__.py", line 51, in start_zope starter.startZope() File "C:\Program Files\Zope-2.7.1\lib\python\Zope\Startup\__init__.py", line 230, in startZope Zope.startup() File "C:\Program Files\Zope-2.7.1\lib\python\Zope\__init__.py", line 47, in startup _startup() File "C:\Program Files\Zope-2.7.1\lib\python\Zope\App\startup.py", line 45, in startup OFS.Application.import_products() File "C:\Program Files\Zope-2.7.1\lib\python\OFS\Application.py", line 637, in import_products import_product(product_dir, product_name, raise_exc=debug_mode) File "C:\Program Files\Zope-2.7.1\lib\python\OFS\Application.py", line 660, in import_product product=__import__(pname, global_dict, global_dict, silly) File "C:\Zope-Instance\Products\ABPcWeb\__init__.py", line 8, in ? allow_class(PySslSet) File "C:\Program Files\Zope-2.7.1\lib\python\AccessControl\SecurityInfo.py", line 313, in allow_class sec.apply(Class) File "C:\Program Files\Zope-2.7.1\lib\python\AccessControl\SecurityInfo.py", line 165, in apply dict['%s__roles__' % name] = access TypeError: object does not support item assignment
<-- end: zope-error -->
after searching the web for a possible solution of that problem, i realized that since python v2.2 the __dict__-attribute isnt a real dictionary, but a proxy-object. a direct access to __dict__ isnt allowed anymore, so zope cant do its work.
to solve the problem, i've patched the following two files: <Zope-Root>/lib/python/AccessControl/SecurityInfo.py and <Zope-Root>/lib/python/App/class_init.py
i've changed all direct-access commands invoking __dict__ to setattr()- and delattr()-methods. for example:
--(SecurityInfo.py Line: 165)-- dict['%s__roles__' % name] = access
now is:
setattr(classobj, ('%s__roles__' % name), access)
after that changes, the allowing of my module + classes worked well.
now my question: is there a workaround for that problem without changing the zope-source ? is that 'bug' fixed in further versions ?
best regards, Manuel Markwort
_______________________________________________
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )