[Erp5-report] r41141 nicolas.dumazet - in /erp5/trunk/products/ERP5Type: ./ Tool/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Dec 6 09:24:37 CET 2010


Author: nicolas.dumazet
Date: Mon Dec  6 09:24:36 2010
New Revision: 41141

URL: http://svn.erp5.org?rev=41141&view=rev
Log:
code allowing to migrate to portal type classes

Modified:
    erp5/trunk/products/ERP5Type/Base.py
    erp5/trunk/products/ERP5Type/Tool/BaseTool.py
    erp5/trunk/products/ERP5Type/Tool/TypesTool.py

Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=41141&r1=41140&r2=41141&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Mon Dec  6 09:24:36 2010
@@ -3844,6 +3844,17 @@ class Base( CopyContainer,
   def isItem(self):
     return self.portal_type in self.getPortalItemTypeList()
 
+  def _migrateToPortalTypeClass(self):
+    klass = self.__class__
+    portal_type = self.getPortalType()
+    if klass.__module__ not in ('erp5.portal_type', 'erp5.temp_portal_type'):
+      import erp5.portal_type
+      newklass = getattr(erp5.portal_type, portal_type)
+      assert klass != newklass
+      self.__class__ = newklass
+
+    return True
+
   security.declareProtected(Permissions.DeletePortalContent,
                             'migratePortalType')
   def migratePortalType(self, portal_type):

Modified: erp5/trunk/products/ERP5Type/Tool/BaseTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/BaseTool.py?rev=41141&r1=41140&r2=41141&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/BaseTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Tool/BaseTool.py [utf8] Mon Dec  6 09:24:36 2010
@@ -32,6 +32,7 @@ from AccessControl import ClassSecurityI
 from Products.ERP5Type.Globals import InitializeClass, DTMLFile
 from Products.ERP5Type.Core.Folder import Folder
 from Products.ERP5Type import Permissions, _dtmldir
+from zLOG import LOG, INFO, WARNING
 
 class BaseTool (UniqueObject, Folder):
     """
@@ -74,4 +75,33 @@ class BaseTool (UniqueObject, Folder):
                 meta_types.append(meta_type)
         return meta_types
 
+    def _migrateToPortalTypeClass(self):
+      portal_type = self.getPortalType()
+      # Tools are causing problems: they used to have no type_class, or wrong
+      # type_class. First check that everything is alright before trying
+      # to migrate the tool:
+      types_tool = self.getPortalObject().portal_types
+      type_definition = getattr(types_tool, portal_type, None)
+      if type_definition is None:
+        LOG('TypesTool', WARNING,
+            "No portal type was found for Tool '%s'"
+            " (class %s, portal_type '%s')"
+            % (self.getRelativeUrl(), self.__class__.__name__, portal_type))
+        return False
+
+      type_class = type_definition.getTypeClass()
+      if type_class in ('Folder', None):
+        # wrong type_class, fix it manually:
+        from Products.ERP5Type import document_class_registry
+        document_class_name = portal_type.replace(' ', '')
+        if document_class_name in document_class_registry:
+          type_definition.setTypeClass(document_class_name)
+        else:
+          LOG('TypesTool', WARNING,
+              'No document class could be found for portal type %s'
+              % portal_type)
+          return False
+
+      return super(BaseTool, self)._migrateToPortalTypeClass()
+
 InitializeClass(BaseTool)

Modified: erp5/trunk/products/ERP5Type/Tool/TypesTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/TypesTool.py?rev=41141&r1=41140&r2=41141&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/TypesTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Tool/TypesTool.py [utf8] Mon Dec  6 09:24:36 2010
@@ -326,6 +326,15 @@ class TypesTool(TypeProvider):
       trashbin = UnrestrictedMethod(trash_tool.newTrashBin)(self.id)
       trashbin._setOb(old_types_tool.id, old_types_tool)
 
+    def _migrateToPortalTypeClass(self):
+      for type_definition in self.contentValues():
+        if not type_definition._migrateToPortalTypeClass():
+          LOG('TypesTool', WARNING,
+              'Type definition %s was not migrated'
+              % type_definition.getRelativeUrl())
+          return False
+      return super(BaseTool, self)._migrateToPortalTypeClass()
+
 # Compatibility code to access old "ERP5 Role Information" objects.
 OldRoleInformation = imp.new_module('Products.ERP5Type.RoleInformation')
 sys.modules[OldRoleInformation.__name__] = OldRoleInformation



More information about the Erp5-report mailing list