[Zope-dev] Making Role.py's __ac_local_roles__ play nicely with computed attributes

2004-11-25 Thread Christian Theune
Hi,

we currently have a project where we calculate local roles dynamically.
This involves using a computed attribute as an __ac_local_roles__
replacement. Unfortunately this doesn't mix too well with assigning them
manually, although our computed attribute takes care.

Why is this and what can we do against that?

__ac_local_roles__ is a dict. It's not a PersistentDictionary, but an
ordinary Python dict. Therefore, to obey the rules of persistence, the
Role.py local role machinery reassigns __ac_local_roles__ after every
change.

I'd like to change this, so that Role.py sets _p_changed instead, which
is what it tries to signal. Additionally you need to explicitly assign
__ac_local_roles__ instead of just getting

dict=self.__ac_local_roles__ or {}

so this becomes

dict=self.__ac_local_roles__
if dict is None:
self.__ac_local_roles = dict = {}

This change works without disrupting the unit tests and I would love to
get it on Zope 2.8. Any objections?

I take silence as a 'no objections'.

Cheers,
Christian

-- 
gocept gmbh  co. kg - schalaunische str. 6 - 06366 koethen - germany
www.gocept.com - [EMAIL PROTECTED] - phone +49 3496 30 99 112 -
fax +49 3496 30 99 118 - zope and plone consulting and development


signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
___
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 )


Re: [Zope-dev] Making Role.py's __ac_local_roles__ play nicely with computed attributes

2004-11-25 Thread Florent Guillaume
 we currently have a project where we calculate local roles dynamically.
 This involves using a computed attribute as an __ac_local_roles__
 replacement. Unfortunately this doesn't mix too well with assigning them
 manually, although our computed attribute takes care.
 
 Why is this and what can we do against that?
 
 __ac_local_roles__ is a dict. It's not a PersistentDictionary, but an
 ordinary Python dict. Therefore, to obey the rules of persistence, the
 Role.py local role machinery reassigns __ac_local_roles__ after every
 change.
 
 I'd like to change this, so that Role.py sets _p_changed instead, which
 is what it tries to signal. Additionally you need to explicitly assign
 __ac_local_roles__ instead of just getting
 
 dict=self.__ac_local_roles__ or {}
 
 so this becomes
 
 dict=self.__ac_local_roles__
 if dict is None:
 self.__ac_local_roles = dict = {}
 
 This change works without disrupting the unit tests and I would love to
 get it on Zope 2.8. Any objections?
 
 I take silence as a 'no objections'.

Ok with me.

Although there must be a number of products out there that manipulate
local roles directly and don't obey that... But probably at this point
it's not important.

But please add a small comment to the code to the effect that you don't
want to re-assign __ac_local_roles__ because it may be a complex object.

Florent

-- 
Florent Guillaume, Nuxeo (Paris, France)   CTO, Director of RD
+33 1 40 33 71 59   http://nuxeo.com   [EMAIL PROTECTED]
___
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 )