[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