[Erp5-report] r43884 arnaud.fontaine - /erp5/trunk/products/ERP5Type/Core/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Mar 2 12:01:50 CET 2011


Author: arnaud.fontaine
Date: Wed Mar  2 12:01:50 2011
New Revision: 43884

URL: http://svn.erp5.org?rev=43884&view=rev
Log:
For per-document accessors generation, rely on evaluateExpressionFromString 
and skip invalid category after displaying a message in the logs

Modified:
    erp5/trunk/products/ERP5Type/Core/DynamicCategoryProperty.py

Modified: erp5/trunk/products/ERP5Type/Core/DynamicCategoryProperty.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Core/DynamicCategoryProperty.py?rev=43884&r1=43883&r2=43884&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Core/DynamicCategoryProperty.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Core/DynamicCategoryProperty.py [utf8] Wed Mar  2 12:01:50 2011
@@ -28,9 +28,11 @@
 
 from AccessControl import ClassSecurityInfo
 from Products.CMFCore.Expression import Expression
-
+from zLOG import LOG, INFO
+from Products.ERP5Type.Utils import evaluateExpressionFromString
 from Products.ERP5Type import Permissions, PropertySheet
 from Products.ERP5Type.Core.CategoryProperty import CategoryProperty
+from Products.ERP5Type.Core.StandardProperty import StandardProperty
 
 class DynamicCategoryProperty(CategoryProperty):
   """
@@ -48,6 +50,7 @@ class DynamicCategoryProperty(CategoryPr
   property_sheets = (PropertySheet.SimpleItem,
                      PropertySheet.DynamicCategoryProperty)
 
+  # TODO: REMOVE
   security.declareProtected(Permissions.AccessContentsInformation,
                             'exportToFilesystemDefinition')
   def exportToFilesystemDefinition(self):
@@ -73,15 +76,19 @@ class DynamicCategoryProperty(CategoryPr
   security.declareProtected(Permissions.AccessContentsInformation,
                             'applyOnAccessorHolder')
   def applyOnAccessorHolder(self, accessor_holder, expression_context, portal):
-    expression_string = self.getCategoryExpression()
-    if expression_string is not None:
-      expression = Expression(expression_string)
-      value = expression(expression_context)
-
-      category_tool = getattr(portal, 'portal_categories', None)
-      if not isinstance(value, (tuple, list)):
-        value = [value]
-      for category_id in value:
-        self.applyPropertyOnAccessorHolder(accessor_holder,
-                                           category_id,
-                                           category_tool)
+    category_id_list = evaluateExpressionFromString(expression_context,
+                                                    self.getCategoryExpression())
+
+    if not isinstance(category_id_list, (tuple, list)):
+      category_id_list = [category_id_list]
+
+    for category_id in category_id_list:
+      try:
+        self.applyDefinitionOnAccessorHolder(accessor_holder,
+                                             category_id,
+                                             portal)
+      except ValueError, e:
+        # If one of the category defined is invalid, don't give up as
+        # the other ones may be fine
+        LOG("ERP5Type.Core.DynamicCategoryProperty", INFO,
+            "Invalid category: %s" % str(e))



More information about the Erp5-report mailing list