erp5_core: reindex recursively only if indexable children type exists in...
erp5_core: reindex recursively only if indexable children type exists in Base_reindexObjectSecurity.
This is important especially for SyncML Subscription having tons of SyncML Signatures that is non-indexable.
Note: first I tried the change in the restricted python only like :
--- product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_reindexObjectSecurity.py
+++ product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_reindexObjectSecurity.py
@@ -4,7 +4,8 @@
# with lots of content could mean hours of non-usable overloaded system.
type_tool = context.getPortalObject().portal_types
for portal_type_name in context.getTypeInfo().getTypeAllowedContentTypeList():
- if getattr(type_tool, portal_type_name).getTypeAcquireLocalRole():
+ if getattr(type_tool, portal_type_name).getTypeAcquireLocalRole() and \
+ type_tool.getPortalTypeClass(portal_type_name).isIndexable():
reindex = context.recursiveReindexObject
break
else:
but I got the following exception :
File "Script (Python)", line 8, in Base_reindexObjectSecurity
type_tool.getPortalTypeClass(portal_type_name).isIndexable():
File "/(SR)/eggs/AccessControl-4.4-py2.7-linux-x86_64.egg/AccessControl/users.py", line 179, in allowed
if self._check_context(object):
File "/(SR)/parts/erp5/product/ERP5Type/patches/AccessControl_patch.py", line 44, in _check_context
return aq_inContextOf(getattr(object, '__self__', object), context, 1)
TypeError: unbound method _aq_dynamic() must be called with Address instance as first argument (got str instance instead)