[Erp5-report] r14540 - in /erp5/trunk/products/ERP5Type: ./ Tool/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon May 21 19:48:40 CEST 2007


Author: jerome
Date: Mon May 21 19:48:39 2007
New Revision: 14540

URL: http://svn.erp5.org?rev=14540&view=rev
Log:
DocumentationHelper was broken because _aq_dynamic on temp objects now create
methods not on the class itself (a TempClass), but on the parent class. As a
consequence, it's no longer possible to create temp class without a "real"
class as parent class.


Modified:
    erp5/trunk/products/ERP5Type/Base.py
    erp5/trunk/products/ERP5Type/Tool/ClassTool.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=14540&r1=14539&r2=14540&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Mon May 21 19:48:39 2007
@@ -2968,6 +2968,7 @@
 
   security.declarePublic('edit')
 
+
 def newTempDocumentationHelper(folder, id, REQUEST=None, **kw):
   o = TempDocumentationHelper(id)
   o = o.__of__(folder)
@@ -2975,7 +2976,8 @@
     o._edit(force_update=1, **kw)
   return o
 
-class TempDocumentationHelper(TempBase):
+
+class DocumentationHelper(Base):
   """
     Contains information about a documentable item.
     Documentable item can be any python type, instanciated or not.
@@ -2988,7 +2990,7 @@
                     , PropertySheet.DublinCore
                     , PropertySheet.DocumentationHelper
                     , )
-
+  
   def _funcname_cmp_prepare(self, funcname):
     for pos in range(len(funcname)):
       if funcname[pos] != '_':
@@ -2996,6 +2998,8 @@
     return '%s%s' % (funcname[pos:], funcname[:pos])
 
   def __cmp__(self, documentationhelper):
+    if not isinstance(documentationhelper, DocumentationHelper):
+      return -1
     my_title = self._funcname_cmp_prepare(self.getTitle())
     his_title = self._funcname_cmp_prepare(documentationhelper.getTitle())
     if my_title < his_title:
@@ -3003,3 +3007,14 @@
     if my_title > his_title:
       return 1
     return 0
+
+class TempDocumentationHelper(DocumentationHelper, TempBase):
+  """Temporary version of Documentation Helper.
+
+  Actually we only use temporary instances of DocumentationHelper, but
+  as _aq_dynamic initialize methods on the base class for temp objects, it's
+  required that all temp objects have a corresponding "real" class as
+  klass.__bases__[0]
+  """
+ 
+

Modified: erp5/trunk/products/ERP5Type/Tool/ClassTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/ClassTool.py?rev=14540&r1=14539&r2=14540&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/ClassTool.py (original)
+++ erp5/trunk/products/ERP5Type/Tool/ClassTool.py Mon May 21 19:48:39 2007
@@ -29,6 +29,8 @@
 import os
 import shutil
 import tempfile
+import inspect
+from pprint import pformat
 
 from Products.CMFCore.utils import UniqueObject
 
@@ -44,6 +46,7 @@
 from Products.ERP5Type import _dtmldir
 from Products.ERP5Type.Tool.BaseTool import BaseTool
 from Products.ERP5Type.Core.Folder import Folder
+from Products.ERP5Type import Document
 
 from Products.ERP5Type.Utils import readLocalPropertySheet, writeLocalPropertySheet, getLocalPropertySheetList
 from Products.ERP5Type.Utils import readLocalExtension, writeLocalExtension, getLocalExtensionList
@@ -53,6 +56,7 @@
 from Products.ERP5Type.InitGenerator import getProductDocumentPathList
 
 from Products.ERP5Type.Base import _aq_reset
+from Products.ERP5Type.Base import newTempDocumentationHelper
 
 from Products.ERP5Type import allowClassTool
 
@@ -833,9 +837,6 @@
 
           XXX: this code is (almost) duplicated from ERP5Types/Base.py:asDocumentationHelper
         """
-        from Products.ERP5Type import Document # XXX : Move to top
-        import inspect # XXX: Move to top
-        from pprint import pformat # XXX: move at top
 
         my_class = getattr(getattr(Document, class_id), class_id)
         method_list = []

Modified: erp5/trunk/products/ERP5Type/tests/testClassTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testClassTool.py?rev=14540&r1=14539&r2=14540&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testClassTool.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testClassTool.py Mon May 21 19:48:39 2007
@@ -94,6 +94,29 @@
     self.assertEqual(portal_classes.getLocalDocumentList(), ['Toto'])
 
 
+  # Test self-documentating features of ERP5Type documents through
+  # portal_classes.
+  def test_AsDocumentationHelperOnDocument(self):
+    # All Documents can be turned into a documentation helper
+    portal = self.getPortal()
+    folder = portal.newContent(portal_type='Folder', id='test_folder')
+    doc_helper = folder.asDocumentationHelper()
+    self.assertNotEquals(doc_helper, None)
+    # We simply check that we can access methods of the documentation helper
+    self.failUnless('Base' in doc_helper.getInheritanceList())
+    self.assertNotEquals([], doc_helper.getStaticMethodList())
+
+
+  def test_AsDocumentationHelperOnClassTool(self):
+    # From the class tool, we can get documentation helper for classes defining
+    # a Document
+    class_tool = self.getPortal().portal_classes
+    class_doc_helper = class_tool.asDocumentationHelper(class_id='Folder')
+    self.assertNotEquals(class_doc_helper, None)
+    # We simply check that we can access methods of the documentation helper
+    self.assertNotEquals([], class_doc_helper.getStaticPropertyList())
+
+
 import unittest
 def test_suite():
     suite = unittest.TestSuite()




More information about the Erp5-report mailing list