[Erp5-report] r43154 nicolas.dumazet - in /erp5/trunk/products/ERP5Type: ./ DocumentationHe...

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Feb 8 06:36:45 CET 2011


Author: nicolas.dumazet
Date: Tue Feb  8 06:36:45 2011
New Revision: 43154

URL: http://svn.erp5.org?rev=43154&view=rev
Log:
adapt DocumentationHelper & introspection code

The property holder is now the portal type class itself.

Modified:
    erp5/trunk/products/ERP5Type/Base.py
    erp5/trunk/products/ERP5Type/DocumentationHelper/DocumentationHelper.py
    erp5/trunk/products/ERP5Type/DocumentationHelper/PortalTypeDocumentationHelper.py

Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=43154&r1=43153&r2=43154&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Tue Feb  8 06:36:45 2011
@@ -331,9 +331,9 @@ class PropertyHolder(object):
     Invokes appropriate factory and create an accessor
     """
     fake_accessor = getattr(self, id)
-    ptype = getattr(self, '_portal_type', None)
+    ptype = getattr(self, 'portal_type', None)
     if ptype is None:
-      ptype = self.portal_type
+      ptype = self._portal_type
     if fake_accessor is PropertyHolder.WORKFLOW_METHOD_MARKER:
       # Case 1 : a workflow method only
       accessor = Base._doNothing
@@ -437,7 +437,7 @@ class PropertyHolder(object):
         if y is PropertyHolder.WORKFLOW_METHOD_MARKER or x == '__ac_permissions__':
           continue
         if len(y) == 0:
-          raise ValueError("problem at %s %s" % (self._portal_type, x))
+          continue
         if not issubclass(y[0], Accessor):
           continue
       elif not isinstance(y, Accessor):
@@ -1595,7 +1595,12 @@ class Base( CopyContainer,
       Content properties are filtered out in getPropertyIdList so
       that rendering in ZMI is compatible with Zope standard properties
     """
-    return [property['id'] for property in self._erp5_properties if property['type'] == 'content']
+    result = set()
+    for parent_class in self.__class__.mro():
+      for property in getattr(parent_class, '_properties', []):
+        if property['type'] == 'content':
+          result.add(property['id'])
+    return list(result)
 
   security.declareProtected( Permissions.View, 'getStandardPropertyIdList' )
   def getStandardPropertyIdList(self):
@@ -1603,7 +1608,12 @@ class Base( CopyContainer,
       Return standard properties of the current instance.
       Unlike getPropertyIdList, properties are not converted or rewritten here.
     """
-    return [property['id'] for property in self._erp5_properties if property['type'] != 'content']
+    result = set()
+    for parent_class in self.__class__.mro():
+      for property in getattr(parent_class, '_properties', []):
+        if property['type'] != 'content':
+          result.add(property['id'])
+    return list(result)
 
   # Catalog Related
   security.declareProtected( Permissions.View, 'getObject' )

Modified: erp5/trunk/products/ERP5Type/DocumentationHelper/DocumentationHelper.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/DocumentationHelper/DocumentationHelper.py?rev=43154&r1=43153&r2=43154&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/DocumentationHelper/DocumentationHelper.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/DocumentationHelper/DocumentationHelper.py [utf8] Tue Feb  8 06:36:45 2011
@@ -73,6 +73,7 @@ class TempObjectLibrary(object):
       temp_object = container.newContent(portal_type=portal_type,
                                          id=portal_type,
                                          temp_object=1)
+
       self.portal_type_dict[portal_type] = temp_object
     return temp_object
 
@@ -297,12 +298,7 @@ class DocumentationHelper(Implicit):
     return self.view()
 
   def _getPropertyHolder(self):
-    property_holder = None
-    key = self.getPortalType(), self.getDocumentedObject().__class__
-    if not(Base.aq_portal_type.has_key(key)):
-      self.getDocumentedObject().initializePortalTypeDynamicProperties()
-    property_holder =  Base.aq_portal_type[key]
-    return property_holder
+    return self.getDocumentedObject().__class__
 
 
 InitializeClass(DocumentationHelper)

Modified: erp5/trunk/products/ERP5Type/DocumentationHelper/PortalTypeDocumentationHelper.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/DocumentationHelper/PortalTypeDocumentationHelper.py?rev=43154&r1=43153&r2=43154&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/DocumentationHelper/PortalTypeDocumentationHelper.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/DocumentationHelper/PortalTypeDocumentationHelper.py [utf8] Tue Feb  8 06:36:45 2011
@@ -29,7 +29,6 @@
 from AccessControl import ClassSecurityInfo
 from Products.ERP5Type.Globals import InitializeClass
 from Products.ERP5Type import Permissions
-from Products.ERP5Type.Base import Base
 from DocumentationHelper import DocumentationHelper, TempObjectLibrary
 from DocumentationSection import DocumentationSection
 from PortalTypeInstanceDocumentationHelper import PortalTypeInstanceDocumentationHelper
@@ -270,9 +269,8 @@ class PortalTypeDocumentationHelper(Docu
 
   def _getPropertyHolder(self):
     portal_type = getPortalType(self.uri)
-    temp_object = self.getTempInstance(portal_type)
-    dir_temp = dir(temp_object)
-    return Base.aq_portal_type[(portal_type, temp_object.__class__)]
+    import erp5.portal_type
+    return getattr(erp5.portal_type, portal_type)
 
   security.declareProtected(Permissions.AccessContentsInformation, 'getWorkflowMethodIdList')
   def getWorkflowMethodIdList(self):
@@ -300,8 +298,10 @@ class PortalTypeDocumentationHelper(Docu
     Return a list of tuple (id, method) for every class method
     """
     portal_type = getPortalType(self.uri)
-    klass = self.getTempInstance(portal_type).__class__.__bases__[0]
-    return self._getPropertyHolder().getClassMethodIdList(klass, **kw)
+    import erp5.portal_type
+    klass = getattr(erp5.portal_type, portal_type)
+    document_class = klass.__bases__[0]
+    return klass.getClassMethodIdList(document_class, **kw)
 
   security.declareProtected(Permissions.AccessContentsInformation, 'getClassMethodUriList')
   def getClassMethodUriList(self, inherited=0, **kw):
@@ -310,7 +310,8 @@ class PortalTypeDocumentationHelper(Docu
     """
     method_id_list = self.getClassMethodIdList(inherited=inherited, **kw)
     portal_type = getPortalType(self.uri)
-    klass = self.getTempInstance(portal_type).__class__.__bases__[0]
+    import erp5.portal_type
+    klass = getattr(erp5.portal_type, portal_type)
     class_name = klass.__name__
     module = klass.__module__
     uri_prefix = '%s.%s.' % (module, class_name)



More information about the Erp5-report mailing list