[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