[Erp5-report] r35136 jerome - in /erp5/trunk/products: ERP5/Document/ ERP5Type/Tool/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon May 10 16:31:05 CEST 2010
Author: jerome
Date: Mon May 10 16:31:04 2010
New Revision: 35136
URL: http://svn.erp5.org?rev=35136&view=rev
Log:
fix the massive speed regression from 35109 by:
- hooking _aq_dynamic instead of _getOb (_getOb is called thousands of times)
- making portal_types the first type provider, and only looking up a type
information in other types providers if not found in portal_types
Modified:
erp5/trunk/products/ERP5/Document/BusinessTemplate.py
erp5/trunk/products/ERP5Type/Tool/TypesTool.py
Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=35136&r1=35135&r2=35136&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Mon May 10 16:31:04 2010
@@ -1786,7 +1786,8 @@
portal = obj.getPortalObject()
types_tool = portal.portal_types
type_container_id = obj.getParentId()
- if type_container_id not in types_tool.type_provider_list:
+ if type_container_id != 'portal_types' and \
+ type_container_id not in types_tool.type_provider_list:
types_tool.type_provider_list = tuple(types_tool.type_provider_list) + (
type_container_id,)
Modified: erp5/trunk/products/ERP5Type/Tool/TypesTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/TypesTool.py?rev=35136&r1=35135&r2=35136&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/TypesTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Tool/TypesTool.py [utf8] Mon May 10 16:31:04 2010
@@ -38,8 +38,6 @@
zope.interface.implements(ITypeProvider)
-_MARKER = []
-
class TypesTool(TypeProvider):
"""Provides a configurable registry of portal content types
"""
@@ -51,7 +49,7 @@
zope.interface.implements(ITypesTool)
# TODO: UI to configure this is missing
- type_provider_list = ( 'portal_types', )
+ type_provider_list = ( )
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
@@ -60,28 +58,34 @@
"""List type information from all providers
"""
listTypeInfo = CMFCore_TypesTool.listTypeInfo
- type_info_list = []
+ type_info_list = listTypeInfo(self, container=container)
+ portal = self.getPortalObject()
for provider in self.type_provider_list:
- provider_value = getattr(self, provider, None)
+ provider_value = portal._getOb(provider, None)
if provider_value is not None:
type_info_list.extend(
listTypeInfo(provider_value, container=container))
return type_info_list
-
- def _getOb(self, id, default=_MARKER):
+
+ def _aq_dynamic(self, id):
"""Get a type information from a provider
"""
- _getOb = CMFCore_TypesTool._getOb
+ result = BaseTool._aq_dynamic(self, id)
+ if result is not None:
+ return result
+
+ if id in self.type_provider_list:
+ return None
+
+ default = []
for provider in self.type_provider_list:
provider_value = getattr(self, provider, None)
if provider_value is not None:
- ob = _getOb(provider_value, id, default=default)
+ ob = provider_value._getOb(id, default=default)
if ob is not default:
return ob
- if ob is _MARKER:
- raise AttributeError, id
- return ob
-
+ return None
+
security.declarePrivate('getActionListFor')
def getActionListFor(self, ob=None):
"""Return all actions applicable to the object"""
@@ -100,7 +104,7 @@
portal_type = aq_base(portal_type).getPortalType()
except AttributeError:
return None
- return self._getOb(portal_type, None)
+ return getattr(self, portal_type, None)
security.declareProtected(Permissions.AddPortalContent, 'listDefaultTypeInformation')
def listDefaultTypeInformation(self):
More information about the Erp5-report
mailing list