[Erp5-report] r15521 - /erp5/trunk/products/ERP5Catalog/CatalogTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Aug 7 14:12:57 CEST 2007


Author: vincent
Date: Tue Aug  7 14:12:57 2007
New Revision: 15521

URL: http://svn.erp5.org?rev=15521&view=rev
Log:
Make security cache scoped to transaction.

Modified:
    erp5/trunk/products/ERP5Catalog/CatalogTool.py

Modified: erp5/trunk/products/ERP5Catalog/CatalogTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/CatalogTool.py?rev=15521&r1=15520&r2=15521&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/CatalogTool.py (original)
+++ erp5/trunk/products/ERP5Catalog/CatalogTool.py Tue Aug  7 14:12:57 2007
@@ -38,7 +38,7 @@
 from Acquisition import aq_base, aq_inner, aq_parent
 from DateTime.DateTime import DateTime
 from Products.CMFActivity.ActiveObject import ActiveObject
-from Products.ERP5Type.Cache import CachingMethod
+from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
 
 from AccessControl.PermissionRole import rolesForPermissionOn
 
@@ -479,16 +479,20 @@
                                   "business template."
       if allowedRolesAndUsers:
         allowedRolesAndUsers.sort()
-        def _getSecurityUidList(allowedRolesAndUsers):
+        cache_key = tuple(allowedRolesAndUsers)
+        tv = getTransactionalVariable(self)
+        try:
+          security_uid_cache = tv['getSecurityUidListAndRoleColumnDict']
+        except KeyError:
+          security_uid_cache = tv['getSecurityUidListAndRoleColumnDict'] = {}
+        try:
+          security_uid_list = security_uid_cache[cache_key]
+        except KeyError:
           # XXX: What with this string transformation ?! Souldn't it be done in
           # dtml instead ?
           allowedRolesAndUsers = ["'%s'" % (role, ) for role in allowedRolesAndUsers]
           security_uid_list = [x.uid for x in method(security_roles_list = allowedRolesAndUsers)]
-          return security_uid_list
-        _getSecurityUidList = CachingMethod(_getSecurityUidList,
-                                            id='_getSecurityUidList',
-                                            cache_factory='erp5_content_short')
-        security_uid_list = _getSecurityUidList(allowedRolesAndUsers)
+          security_uid_cache[cache_key] = security_uid_list
       else:
         security_uid_list = []
       return security_uid_list, role_column_dict




More information about the Erp5-report mailing list