From 3ba474922fd0eaa8f19821aa5d6530a9247c180d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Wed, 10 May 2006 12:30:17 +0000
Subject: [PATCH] Store orginial key (ie. title if key is translated_title) in
 the constructor, to prevent unnecessary computations.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@7147 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/Accessor/Translation.py | 34 +++++++++---------------
 1 file changed, 13 insertions(+), 21 deletions(-)

diff --git a/product/ERP5Type/Accessor/Translation.py b/product/ERP5Type/Accessor/Translation.py
index d33b8c0f83..e63725478b 100644
--- a/product/ERP5Type/Accessor/Translation.py
+++ b/product/ERP5Type/Accessor/Translation.py
@@ -26,24 +26,12 @@
 #
 ##############################################################################
 
-from Base import func_code, type_definition, list_types, ATTRIBUTE_PREFIX, Method
+from Base import func_code, ATTRIBUTE_PREFIX, Method, evaluateTales
 from zLOG import LOG
 from Products.ERP5Type.PsycoWrapper import psyco
-from string import lower
 from Acquisition import aq_base
-from Products.ERP5Type.Cache import CachingMethod
 from Products.CMFCore.utils import getToolByName
 
-from Products.CMFCore.Expression import Expression
-def _evaluateTales(instance=None, value=None):
-  from Products.ERP5Type.Utils import createExpressionContext
-  expression = Expression(value)
-  econtext = createExpressionContext(instance)
-  return expression(econtext)
-
-evaluateTales = CachingMethod(_evaluateTales, id = 'evaluateTales', cache_duration=300)
-
-
 class TranslatedPropertyGetter(Method):
   """
   Get the translated property
@@ -60,19 +48,20 @@ class TranslatedPropertyGetter(Method):
     self._id = id
     self.__name__ = id
     self._key = key
+    self._original_key = key.replace('translated_', '')
     self._warning = warning
 
   def __call__(self, instance, *args, **kw):
     if self._warning:
       LOG("ERP5Type Deprecated Getter Id:",0, self._id)
-    prop = self._id[13:]
-    domain_getter_name = "get%sTranslationDomain" %(prop)
-    domain_getter = getattr(instance, domain_getter_name)
-    domain = domain_getter()
+    domain = instance.getProperty('%s_translation_domain' %
+                                  self._original_key)
     if domain == '':
       return instance.getTitle()
     localizer = getToolByName(instance, 'Localizer')
-    return localizer[domain].gettext(unicode(instance.getTitle(), 'utf8')).encode('utf8')      
+    return localizer[domain].gettext(
+                  unicode(instance.getTitle(), 'utf8')
+            ).encode('utf8')
 
   psyco.bind(__call__)
 
@@ -93,6 +82,7 @@ class PropertyTranslationDomainGetter(Method):
     self._id = id
     self.__name__ = id
     self._key = key
+    self._original_key = key.replace('_translation_domain', '')
     self._property_type = property_type
     self._default = default
     if storage_id is None:
@@ -105,14 +95,16 @@ class PropertyTranslationDomainGetter(Method):
       default = args[0]
     else:
       default = self._default
-    value = getattr(aq_base(instance), self._storage_id, None) # No acquisition on properties
+    # No acquisition on properties
+    value = getattr(aq_base(instance), self._storage_id, None)
     if value is None:
       # second try to get it from portal type
-      prop_name = self._id[3:-17]
       ptype_domain = None
       ptype = instance.getPortalType()
       ptypes_tool = instance.getPortalObject()['portal_types']
-      ptype_domain = ptypes_tool[ptype].getPropertyTranslationDomainDict()[lower(prop_name)].getDomainName()
+      ptype_domain = ptypes_tool[ptype]\
+                      .getPropertyTranslationDomainDict()\
+                      [self._original_key].getDomainName()
       if ptype_domain is '' and default is not None:
         # then get the default property defined on property sheet
         value = default
-- 
2.30.9