[Erp5-report] r15780 - in /erp5/trunk/products/ERP5Type: Base.py tests/testClassTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Aug 22 14:50:39 CEST 2007
Author: jerome
Date: Wed Aug 22 14:50:39 2007
New Revision: 15780
URL: http://svn.erp5.org?rev=15780&view=rev
Log:
Add support for property sheets defining _categories with an expression
Modified:
erp5/trunk/products/ERP5Type/Base.py
erp5/trunk/products/ERP5Type/tests/testClassTool.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=15780&r1=15779&r2=15780&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Wed Aug 22 14:50:39 2007
@@ -2924,23 +2924,39 @@
dynamic_accessor_list.append(subdochelper)
if getattr(documented_item, property['id'], None) is not None:
dynamic_property_list.append(subdochelper)
- if getattr(property_sheet, '_categories', None) is not None:
- for category in property_sheet._categories:
- if category in seen_categories:
- continue
- seen_categories.append(category)
- subdochelper = newTempDocumentationHelper(dochelper, category, title=category,
- content=pformat(documented_item.getCategoryMembershipList(category)))
- subdochelper_dynamic_accessor_list = []
- for accessor_name in generateCategoryAccessorNameList(category):
- accessor = getattr(item_class, accessor_name, getattr(documented_item, accessor_name, None))
- # First get it on the class, and if not on the instance, thereby among dynamic accessors.
- if accessor is not None:
- subdochelper_dynamic_accessor_list.append(accessorAsDocumentationHelper(accessor))
- subdochelper_dynamic_accessor_list.sort()
- subdochelper.setDynamicAccessorList(subdochelper_dynamic_accessor_list)
- dynamic_accessor_list.append(subdochelper)
- dynamic_category_list.append(subdochelper)
+
+ def visitCategory(category):
+ if category in seen_categories:
+ return
+ seen_categories.append(category)
+ subdochelper = newTempDocumentationHelper(dochelper, category, title=category,
+ content=pformat(documented_item.getCategoryMembershipList(category)))
+ subdochelper_dynamic_accessor_list = []
+ for accessor_name in generateCategoryAccessorNameList(category):
+ accessor = getattr(item_class, accessor_name, getattr(documented_item, accessor_name, None))
+ # First get it on the class, and if not on the instance, thereby among dynamic accessors.
+ if accessor is not None:
+ subdochelper_dynamic_accessor_list.append(accessorAsDocumentationHelper(accessor))
+ subdochelper_dynamic_accessor_list.sort()
+ subdochelper.setDynamicAccessorList(subdochelper_dynamic_accessor_list)
+ dynamic_accessor_list.append(subdochelper)
+ dynamic_category_list.append(subdochelper)
+
+ category_list = getattr(property_sheet, '_categories', [])
+ # some categories are defined by expressions, so we have to do 2
+ # passes, a first one to treat regular category list and collect
+ # categories defined by expression, a second one to treat thoses
+ # new categories from expressions.
+ expression_category_list = []
+ for category in category_list:
+ if isinstance(category, Expression):
+ econtext = createExpressionContext(self)
+ expression_category_list.extend(category(econtext))
+ continue
+ visitCategory(category)
+
+ for category in expression_category_list:
+ visitCategory(category)
# KEEPME: usefull to track the differences between accessors defined on
# PortalType and the one detected on the documented item.
Modified: erp5/trunk/products/ERP5Type/tests/testClassTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testClassTool.py?rev=15780&r1=15779&r2=15780&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testClassTool.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testClassTool.py Wed Aug 22 14:50:39 2007
@@ -128,6 +128,28 @@
self.assertEquals(0, len(portal.portal_activities.getMessageList()))
+ def test_DocumentationHelperExpressionCategory(self):
+ # This tests checks that Documentation Helper works with propertysheets
+ # that define their categories using expressions.
+ from Products.ERP5Type.Document.Movement import Movement
+ from Products.CMFCore.Expression import Expression
+ movement = Movement('testing_id').__of__(self.getPortal())
+ # This test relies on the fact that Movement class has categories defined
+ # by an expression.
+ category_list = []
+ found_one = 0
+ for ps in movement.property_sheets:
+ for category in getattr(ps, '_categories', []):
+ if isinstance(category, Expression):
+ found_one = 1
+ if found_one:
+ break
+ else:
+ self.fail("Movement _categories doesn't include expressions; "
+ "this test is outdated")
+ self.assertNotEquals(None, movement.asDocumentationHelper())
+
+
import unittest
def test_suite():
suite = unittest.TestSuite()
More information about the Erp5-report
mailing list