[Zope-dev] Making Role.py's __ac_local_roles__ play nicely with computed attributes
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
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 )