Re: [Zope-dev] Problems with allow_class and class built-in __dict__

2004-11-05 Thread Sidnei da Silva
| now my question:
| is there a workaround for that problem without changing the zope-source ? 
| is that 'bug' fixed in
| further versions ?

Known bug.
http://collector.zope.org/Zope/1415

-- 
Sidnei da Silva <[EMAIL PROTECTED]>
http://awkly.org - dreamcatching :: making your dreams come true
http://www.enfoldsystems.com
http://plone.org/about/team#dreamcatcher

Unix soit qui mal y pense
[Unix to him who evil thinks?]
___
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 )


[Zope-dev] Problems with allow_class and class built-in __dict__

2004-11-05 Thread Manuel Markwort
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:
/lib/python/AccessControl/SecurityInfo.py
and
/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 )