From 3f990fa39488ac465b9787b56d58b91259073a07 Mon Sep 17 00:00:00 2001
From: Nicolas Dumazet <nicolas.dumazet@nexedi.com>
Date: Mon, 31 Jan 2011 12:24:52 +0000
Subject: [PATCH] move/rename
 PropertySheetTool._createCommonPropertySheetAccessorHolder to
 accessor_holder._createAccessorHolderFromPropertyHolder

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@42805 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/Tool/PropertySheetTool.py  | 73 ++-----------------
 product/ERP5Type/dynamic/accessor_holder.py | 81 +++++++++++++++++++--
 2 files changed, 82 insertions(+), 72 deletions(-)

diff --git a/product/ERP5Type/Tool/PropertySheetTool.py b/product/ERP5Type/Tool/PropertySheetTool.py
index 302034d0a7..ea1760d7f5 100644
--- a/product/ERP5Type/Tool/PropertySheetTool.py
+++ b/product/ERP5Type/Tool/PropertySheetTool.py
@@ -27,18 +27,17 @@
 #
 ##############################################################################
 
-import sys
 import transaction
 
 from AccessControl import ClassSecurityInfo
 from Products.ERP5Type.Tool.BaseTool import BaseTool
 from Products.ERP5Type import Permissions
 from Products.ERP5Type.Accessor import Translation
+from Products.ERP5Type.Base import PropertyHolder
 from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.Expression import Expression
-from Products.ERP5Type.Base import Base, PropertyHolder
-from Products.ERP5Type.Globals import InitializeClass
-from Products.ERP5Type.Utils import setDefaultClassProperties, setDefaultProperties
+
+from Products.ERP5Type.dynamic.accessor_holder import _createAccessorHolderFromPropertyHolder
 
 from zLOG import LOG, ERROR, INFO
 
@@ -177,66 +176,6 @@ class PropertySheetTool(BaseTool):
 
     return (properties, categories, constraints)
 
-  def _createCommonPropertySheetAccessorHolder(self,
-                                               property_holder,
-                                               property_sheet_id,
-                                               accessor_holder_module_name):
-    """
-    Create a new accessor holder class from the given Property Holder
-    within the given accessor holder module (when the migration will
-    be finished, there should only be one accessor holder module)
-    """
-    setDefaultClassProperties(property_holder)
-
-    try:
-      setDefaultProperties(property_holder,
-                           object=self,
-                           portal=self.getPortalObject())
-    except:
-      LOG("Tool.PropertySheetTool", ERROR,
-          "Could not generate accessor holder class for %s (module=%s)" % \
-          (property_sheet_id, accessor_holder_module_name),
-          error=sys.exc_info())
-
-      raise
-
-    # Create the new accessor holder class and set its module properly
-    accessor_holder_class = type(property_sheet_id, (object,), dict(
-      __module__ = accessor_holder_module_name,
-      constraints = property_holder.constraints,
-      # The following attributes have been defined only because they
-      # are being used in ERP5Type.Utils when getting all the
-      # property_sheets of the property_holder (then, they are added
-      # to the local properties, categories and constraints lists)
-      _properties = property_holder._properties,
-      # Necessary for getBaseCategoryList
-      _categories = property_holder._categories,
-      _constraints = property_holder._constraints,
-      security = property_holder.security
-      ))
-
-    # Set all the accessors (defined by a tuple) from the Property
-    # Holder to the new accessor holder class (code coming from
-    # createAccessor in Base.PropertyHolder)
-    for id, fake_accessor in property_holder._getItemList():
-      if not isinstance(fake_accessor, tuple):
-        continue
-
-      if fake_accessor is PropertyHolder.WORKFLOW_METHOD_MARKER:
-        # Case 1 : a workflow method only
-        accessor = Base._doNothing
-      else:
-        # Case 2 : a workflow method over an accessor
-        (accessor_class, accessor_args, key) = fake_accessor
-        accessor = accessor_class(id, key, *accessor_args)
-
-      # Add the accessor to the accessor holder
-      setattr(accessor_holder_class, id, accessor)
-
-    property_holder.security.apply(accessor_holder_class)
-    InitializeClass(accessor_holder_class)
-    return accessor_holder_class
-
   security.declarePrivate('createFilesystemPropertySheetAccessorHolder')
   def createFilesystemPropertySheetAccessorHolder(self, property_sheet):
     """
@@ -252,7 +191,8 @@ class PropertySheetTool(BaseTool):
     property_holder._categories = getattr(property_sheet, '_categories', [])
     property_holder._constraints = getattr(property_sheet, '_constraints', [])
 
-    return self._createCommonPropertySheetAccessorHolder(
+    return _createCommonPropertySheetAccessorHolder(
+      self.getPortalObject(),
       property_holder,
       property_sheet.__name__,
       'erp5.filesystem_accessor_holder')
@@ -278,7 +218,8 @@ class PropertySheetTool(BaseTool):
     property_sheet_name = property_sheet.getId()
     property_holder.__name__ = property_sheet_name
 
-    return self._createCommonPropertySheetAccessorHolder(
+    return _createAccessorHolderFromPropertyHolder(
+      self.getPortalObject(),
       property_holder,
       property_sheet_name,
       'erp5.accessor_holder')
diff --git a/product/ERP5Type/dynamic/accessor_holder.py b/product/ERP5Type/dynamic/accessor_holder.py
index 00d59cb136..394805eb27 100644
--- a/product/ERP5Type/dynamic/accessor_holder.py
+++ b/product/ERP5Type/dynamic/accessor_holder.py
@@ -34,12 +34,79 @@ as a base class for all erp5.accessor_holder Accessor Holders.
 * Utils, Property Sheet Tool can be probably be cleaned up as well by
 moving specialized code here.
 """
-from Products.ERP5Type.Base import PropertyHolder
+import sys
+
+from Products.ERP5Type.Base import PropertyHolder, Base
 from Products.ERP5Type.Utils import createRelatedAccessors, createExpressionContext
+from Products.ERP5Type.Utils import setDefaultClassProperties, setDefaultProperties
+from Products.ERP5Type.Globals import InitializeClass
+
+from zLOG import LOG, ERROR, INFO
+
+def _createAccessorHolderFromPropertyHolder(portal,
+                                            property_holder,
+                                            property_sheet_id,
+                                            accessor_holder_module_name):
+  """
+  Create a new accessor holder class from the given Property Holder
+  within the given accessor holder module (when the migration will
+  be finished, there should only be one accessor holder module)
+  """
+  setDefaultClassProperties(property_holder)
+
+  try:
+    setDefaultProperties(property_holder,
+                         object=portal,
+                         portal=portal)
+  except:
+    LOG("Tool.PropertySheetTool", ERROR,
+        "Could not generate accessor holder class for %s (module=%s)" % \
+        (property_sheet_id, accessor_holder_module_name),
+        error=sys.exc_info())
+
+    raise
+
+  # Create the new accessor holder class and set its module properly
+  accessor_holder_class = type(property_sheet_id, (object,), dict(
+    __module__ = accessor_holder_module_name,
+    constraints = property_holder.constraints,
+    # The following attributes have been defined only because they
+    # are being used in ERP5Type.Utils when getting all the
+    # property_sheets of the property_holder (then, they are added
+    # to the local properties, categories and constraints lists)
+    _properties = property_holder._properties,
+    # Necessary for getBaseCategoryList
+    _categories = property_holder._categories,
+    _constraints = property_holder._constraints,
+    security = property_holder.security
+    ))
+
+  # Set all the accessors (defined by a tuple) from the Property
+  # Holder to the new accessor holder class (code coming from
+  # createAccessor in Base.PropertyHolder)
+  for id, fake_accessor in property_holder._getItemList():
+    if not isinstance(fake_accessor, tuple):
+      continue
+
+    if fake_accessor is PropertyHolder.WORKFLOW_METHOD_MARKER:
+      # Case 1 : a workflow method only
+      accessor = Base._doNothing
+    else:
+      # Case 2 : a workflow method over an accessor
+      (accessor_class, accessor_args, key) = fake_accessor
+      accessor = accessor_class(id, key, *accessor_args)
+
+    # Add the accessor to the accessor holder
+    setattr(accessor_holder_class, id, accessor)
+
+  property_holder.security.apply(accessor_holder_class)
+  InitializeClass(accessor_holder_class)
+  return accessor_holder_class
+
 
 generating_base_accessors = False
 def _generateBaseAccessorHolder(portal,
-    property_sheet_tool, accessor_holder_module):
+    accessor_holder_module):
   base_accessor_holder_id = 'BaseAccessorHolder'
 
   accessor_holder = getattr(accessor_holder_module,
@@ -69,7 +136,8 @@ def _generateBaseAccessorHolder(portal,
                          econtext,
                          base_category_list)
 
-  accessor_holder = property_sheet_tool._createCommonPropertySheetAccessorHolder(
+  accessor_holder = _createAccessorHolderFromPropertyHolder(
+                      portal,
                       property_holder,
                       base_accessor_holder_id,
                       'erp5.accessor_holder',
@@ -78,8 +146,8 @@ def _generateBaseAccessorHolder(portal,
   generating_base_accessors = False
   return accessor_holder
 
-def _generatePreferenceToolAccessorHolder(accessor_holder_list,
-    property_sheet_tool, accessor_holder_module):
+def _generatePreferenceToolAccessorHolder(portal, accessor_holder_list,
+    accessor_holder_module):
   property_holder = PropertyHolder()
 
   from Products.ERP5Type.Accessor.TypeDefinition import list_types
@@ -105,7 +173,8 @@ def _generatePreferenceToolAccessorHolder(accessor_holder_list,
           if read_permission:
             property_holder.declareProtected(read_permission, attribute_name)
 
-  accessor_holder = property_sheet_tool._createCommonPropertySheetAccessorHolder(
+  accessor_holder = _createAccessorHolderFromPropertyHolder(
+                      portal,
                       property_holder,
                       'PreferenceTool',
                       'erp5.accessor_holder',
-- 
2.30.9