[Erp5-report] r33677 jm - /erp5/trunk/products/ERP5Type/Base.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 11 22:05:33 CET 2010
Author: jm
Date: Thu Mar 11 22:05:31 2010
New Revision: 33677
URL: http://svn.erp5.org?rev=33677&view=rev
Log:
Small optimisations
Modified:
erp5/trunk/products/ERP5Type/Base.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=33677&r1=33676&r2=33677&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Thu Mar 11 22:05:31 2010
@@ -1581,20 +1581,15 @@
returns False if the first name was never defined and
even if self.getProperty('first_name') returns ''
"""
- accessor_name = 'has' + UpperCase(key)
- if hasattr(self, accessor_name):
- method = getattr(self, accessor_name)
- try:
- return method()
- except ConflictError:
- raise
- except:
- return 0
- else:
+ method = getattr(self, 'has' + UpperCase(key), _MARKER)
+ if method is _MARKER:
# Check in local properties (which obviously were defined at some point)
- for p_id in self.propertyIds():
- if key == p_id:
- return 1
+ return key in self.propertyIds()
+ try:
+ return method()
+ except ConflictError:
+ raise
+ except:
return 0
security.declareProtected(Permissions.AccessContentsInformation,
@@ -2552,7 +2547,6 @@
if id_ in ptype_translation_dict:
return str(Message('erp5_ui', ptype_translation_dict[id_]))
-
security.declareProtected(Permissions.AccessContentsInformation,
'getCompactTitle')
def getCompactTitle(self):
@@ -2571,12 +2565,11 @@
if self.hasShortTitle():
r = self.getShortTitle()
if r: return r
- if self.getProperty('reference'):
- r = self.getProperty('reference')
- if r: return r
- r = self._baseGetTitle() # No need to test existence since all Base instances have this method
- if r: return r # Also useful whenever title is calculated
- return self.getId()
+ return (self.getProperty('reference') or
+ # No need to test existence since all Base instances have this method
+ # Also useful whenever title is calculated
+ self._baseGetTitle() or
+ self.getId())
security.declareProtected(Permissions.AccessContentsInformation,
'getCompactTranslatedTitle')
@@ -2605,13 +2598,12 @@
if r: return r
r = self.getShortTitle()
if r: return r
- if self.getProperty('reference'):
- r = self.getReference()
- if r: return r
- r = self._baseGetTranslatedTitle() # No need to test existence since all Base instances have this method
- if r: return r # Also useful whenever title is calculated
- return self.getId()
-
+ return (self.getProperty('reference') or
+ # No need to test existence since all Base instances have this method
+ # Also useful whenever title is calculated
+ self._baseGetTranslatedTitle() or
+ self.getId())
+
# This method allows to sort objects in list is a more reasonable way
security.declareProtected(Permissions.AccessContentsInformation, 'getIntId')
def getIntId(self):
@@ -3057,16 +3049,6 @@
fallback_script_id : the script to use if nothing is found
"""
- def getScriptName(portal_type, method_id):
- from Products.ERP5Type.Base import Base
- class_name_list = [base_class.__name__ for base_class in self.__class__.mro() if issubclass(base_class, Base)]
- script_name_end = '_%s' % method_id
- for script_name_begin in [portal_type, self.getMetaType()] + class_name_list:
- name = ''.join([script_name_begin.replace(' ',''), script_name_end])
- script = getattr(self, name, None)
- if script is not None:
- return name
-
# script_id should not be used any more, keep compatibility
if script_id is not None:
LOG('ERP5Type/Base.getTypeBaseMethod',0,
@@ -3077,18 +3059,26 @@
# transaction
portal_type = self.getPortalType()
tv = getTransactionalVariable(self)
- type_base_cache = tv.setdefault(
- 'Base.type_based_cache', {})
+ type_base_cache = tv.setdefault('Base.type_based_cache', {})
cache_key = (portal_type, method_id)
try:
- name = type_base_cache[cache_key]
+ script = type_base_cache[cache_key]
except KeyError:
- name = getScriptName(portal_type, method_id)
- type_base_cache[cache_key] = name
-
- if name is not None:
- return getattr(self, name)
+ class_name_list = [portal_type, self.getMetaType()] + \
+ [base_class.__name__ for base_class in self.__class__.mro()
+ if issubclass(base_class, Base)]
+ script_name_end = '_' + method_id
+ for script_name_begin in class_name_list:
+ script_id = script_name_begin.replace(' ','') + script_name_end
+ script = getattr(self, script_id, None)
+ if script is not None:
+ type_base_cache[cache_key] = aq_base(script)
+ return script
+ type_base_cache[cache_key] = None
+
+ if script is not None:
+ return script.__of__(self)
if fallback_script_id is not None:
return getattr(self, fallback_script_id)
More information about the Erp5-report
mailing list