[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/ - split upgrades into several task-centric steps

Yvo Schubbe y.2008 at wcm-solutions.de
Tue Dec 23 15:46:55 EST 2008


Log message for revision 94298:
  - split upgrades into several task-centric steps

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/__init__.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to21.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/__init__.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/__init__.py	2008-12-23 20:04:06 UTC (rev 94297)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/__init__.py	2008-12-23 20:46:54 UTC (rev 94298)
@@ -14,3 +14,7 @@
 
 $Id$
 """
+
+def mark_as_finished(tool):
+    """empty upgrade step handler
+    """

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml	2008-12-23 20:04:06 UTC (rev 94297)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml	2008-12-23 20:46:54 UTC (rev 94298)
@@ -4,19 +4,94 @@
     i18n_domain="cmf_default">
 
   <genericsetup:upgradeStep
+      title="Mark 2.0 upgrade as finished"
+      source="*"
+      destination="2.0"
+      profile="Products.CMFDefault:default"
+      handler=".mark_as_finished"
+      sortkey="1"
+      />
+
+  <genericsetup:upgradeSteps
       source="2.0"
       destination="2.1"
-      title="Upgrade CMFDefault from 2.0 to 2.1 (only site object and types)"
       profile="Products.CMFDefault:default"
-      handler=".to21.upgrade_default"
+      sortkey="2">
+
+    <genericsetup:upgradeStep
+        title="Add root site manager"
+        handler=".to21.add_root_site_manager"
+        checker=".to21.check_root_site_manager"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade root lookup class"
+        handler=".to21.upgrade_root_lookup_class"
+        checker=".to21.check_root_lookup_class"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade root properties"
+        handler=".to21.upgrade_root_properties"
+        checker=".to21.check_root_properties"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade type properties"
+        handler=".to21.upgrade_type_properties"
+        checker=".to21.check_type_properties"
+        />
+
+  </genericsetup:upgradeSteps>
+
+  <genericsetup:upgradeStep
+      title="Mark 2.1 upgrade as finished"
+      source="2.0"
+      destination="2.1"
+      profile="Products.CMFDefault:default"
+      handler=".mark_as_finished"
+      sortkey="3"
       />
 
+  <genericsetup:upgradeSteps
+      source="2.1"
+      destination="2.2"
+      profile="Products.CMFDefault:default"
+      sortkey="4">
+
+    <genericsetup:upgradeStep
+        title="Upgrade root site manager"
+        handler=".to22.upgrade_root_site_manager"
+        checker=".to22.check_root_site_manager"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade root properties"
+        handler=".to22.upgrade_root_properties"
+        checker=".to22.check_root_properties"
+        />
+
+    <genericsetup:upgradeStep
+        title="Upgrade type properties"
+        handler=".to22.upgrade_type_properties"
+        checker=".to22.check_type_properties"
+        />
+
+    <genericsetup:upgradeStep
+        title="Add action icons"
+        handler=".to22.add_action_icons"
+        checker=".to22.check_action_icons"
+        />
+
+  </genericsetup:upgradeSteps>
+
   <genericsetup:upgradeStep
+      title="Mark 2.2 upgrade as finished"
       source="2.1"
       destination="2.2"
-      title="Upgrade CMFDefault from 2.1 to 2.2 (only site object and types)"
       profile="Products.CMFDefault:default"
-      handler=".to22.upgrade_default"
+      handler=".mark_as_finished"
+      sortkey="5"
       />
 
 </configure>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to21.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to21.py	2008-12-23 20:04:06 UTC (rev 94297)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to21.py	2008-12-23 20:46:54 UTC (rev 94298)
@@ -26,6 +26,7 @@
 from zope.component.globalregistry import base
 from zope.component.interfaces import ComponentLookupError
 
+from Products.CMFCore.utils import getToolByName
 from Products.GenericSetup.context import SetupEnviron
 from Products.GenericSetup.interfaces import IBody
 
@@ -53,49 +54,77 @@
 </componentregistry>
 """
 
-def upgrade_default(tool):
+def check_root_site_manager(tool):
+    """2.0.x to 2.1.0 upgrade step checker
+    """
+    portal = aq_base(aq_parent(aq_inner(tool)))
+    try:
+        portal.getSiteManager()
+        return False
+    except ComponentLookupError:
+        return True
+
+def add_root_site_manager(tool):
     """2.0.x to 2.1.0 upgrade step handler
     """
-    portal = aq_parent(aq_inner(tool))
     logger = logging.getLogger('GenericSetup.upgrade')
-    upgrade_CMFSite_object(aq_base(portal), logger)
-    upgrade_TypeInfos(portal, logger)
+    portal = aq_base(aq_parent(aq_inner(tool)))
+    next = find_next_sitemanager(portal)
+    if next is None:
+        next = base
+    name = '/'.join(portal.getPhysicalPath())
+    components = PersistentComponents(name, (next,))
+    components.__parent__ = portal
+    portal.setSiteManager(components)
+    logger.info("Site manager '%s' added." % name)
+    getMultiAdapter((components, SetupEnviron()), IBody).body = _XML
+    logger.info('Utility registrations added.')
 
-def upgrade_CMFSite_object(portal, logger):
+def check_root_lookup_class(tool):
+    """2.1 beta to 2.1.0 upgrade step checker
+    """
+    portal = aq_base(aq_parent(aq_inner(tool)))
     try:
         components = portal.getSiteManager()
     except ComponentLookupError:
-        next = find_next_sitemanager(portal)
-        if next is None:
-            next = base
-        name = '/'.join(portal.getPhysicalPath())
-        components = PersistentComponents(name, (next,))
-        components.__parent__ = portal
-        portal.setSiteManager(components)
-        logger.info("Site manager '%s' added." % name)
-    else:
-        if components.utilities.LookupClass != FiveVerifyingAdapterLookup:
-            # for CMF 2.1 beta instances
-            components.__parent__ = portal
-            components.utilities.LookupClass = FiveVerifyingAdapterLookup
-            components.utilities._createLookup()
-            components.utilities.__parent__ = components
-            logger.info('LookupClass replaced.')
-    if not tuple(components.registeredUtilities()):
-        getMultiAdapter((components, SetupEnviron()), IBody).body = _XML
-        logger.info('Utility registrations added.')
+        return False
+    return components.utilities.LookupClass != FiveVerifyingAdapterLookup
 
-    if not portal.hasProperty('email_charset'):
-        portal.manage_addProperty('email_charset', 'iso-8859-1', 'string')
-        prop_map = list(portal._properties)
-        for i in range(len(prop_map)):
-            if prop_map[i]['id'] == 'default_charset':
-                email_charset_info = prop_map.pop(-1)
-                prop_map.insert(i+1, email_charset_info)
-                portal._properties = tuple(prop_map)
-                break
-        logger.info("'email_charset' property added.")
+def upgrade_root_lookup_class(tool):
+    """2.1 beta to 2.1.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    portal = aq_base(aq_parent(aq_inner(tool)))
+    components = portal.getSiteManager()
+    components.__parent__ = portal
+    components.utilities.LookupClass = FiveVerifyingAdapterLookup
+    components.utilities._createLookup()
+    components.utilities.__parent__ = components
+    logger.info('LookupClass replaced.')
+    getMultiAdapter((components, SetupEnviron()), IBody).body = _XML
+    logger.info('Utility registrations replaced.')
 
+def check_root_properties(tool):
+    """2.0.x to 2.1.0 upgrade step checker
+    """
+    portal = aq_parent(aq_inner(tool))
+    return not portal.hasProperty('email_charset')
+
+def upgrade_root_properties(tool):
+    """2.0.x to 2.1.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    portal = aq_parent(aq_inner(tool))
+    portal.manage_addProperty('email_charset', 'iso-8859-1', 'string')
+    prop_map = list(portal._properties)
+    for i in range(len(prop_map)):
+        if prop_map[i]['id'] == 'default_charset':
+            email_charset_info = prop_map.pop(-1)
+            prop_map.insert(i+1, email_charset_info)
+            portal._properties = tuple(prop_map)
+            break
+    logger.info("'email_charset' property added.")
+
 _FACTORIES = {
     'CMFCore-manage_addPortalFolder': 'cmf.folder',
     'CMFCore-manage_addCMFBTreeFolder': 'cmf.folder.btree',
@@ -106,11 +135,24 @@
     'CMFDefault-addLink': 'cmf.link',
     'CMFDefault-addNewsItem': 'cmf.newsitem'}
 
-def upgrade_TypeInfos(portal, logger):
-    ttool = portal.portal_types
+def check_type_properties(tool):
+    """2.0.x to 2.1.0 upgrade step checker
+    """
+    ttool = getToolByName(tool, 'portal_types')
     for ti in ttool.listTypeInfo():
         key = '%s-%s' % (ti.getProperty('product'), ti.getProperty('factory'))
         if key in _FACTORIES:
+            return True
+    return False
+
+def upgrade_type_properties(tool):
+    """2.0.x to 2.1.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    ttool = getToolByName(tool, 'portal_types')
+    for ti in ttool.listTypeInfo():
+        key = '%s-%s' % (ti.getProperty('product'), ti.getProperty('factory'))
+        if key in _FACTORIES:
             ti._updateProperty('product', '')
             ti._updateProperty('factory', _FACTORIES[key])
             logger.info("TypeInfo '%s' changed." % ti.getId())

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py	2008-12-23 20:04:06 UTC (rev 94297)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py	2008-12-23 20:46:54 UTC (rev 94298)
@@ -19,24 +19,73 @@
 
 from Acquisition import aq_inner
 from Acquisition import aq_parent
+from zope.component.interfaces import ComponentLookupError
 
-def upgrade_default(tool):
+from Products.CMFCore.utils import getToolByName
+
+def check_root_site_manager(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    portal = aq_parent(aq_inner(tool))
+    try:
+        components = portal.getSiteManager()
+    except ComponentLookupError:
+        return True
+    return components.__name__ != '++etc++site'
+
+def upgrade_root_site_manager(tool):
     """2.1.x to 2.2.0 upgrade step handler
     """
+    logger = logging.getLogger('GenericSetup.upgrade')
     portal = aq_parent(aq_inner(tool))
+    try:
+        components = portal.getSiteManager()
+    except ComponentLookupError:
+        logger.warning("Site manager missing.")
+        return
+    components.__name__ = '++etc++site'
+    logger.info("Site manager name changed to '++etc++site'.")
+
+def check_root_properties(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    portal = aq_parent(aq_inner(tool))
+    return not portal.hasProperty('enable_actionicons')
+
+def upgrade_root_properties(tool):
+    """2.1.x to 2.2.0 upgrade step handler
+    """
     logger = logging.getLogger('GenericSetup.upgrade')
-    upgrade_CMFSite_object(portal, logger)
-    upgrade_TypeInfos(portal, logger)
+    portal = aq_parent(aq_inner(tool))
+    portal.manage_addProperty('enable_actionicons', False, 'boolean')
+    logger.info("'enable_actionicons' property added.")
 
-def upgrade_CMFSite_object(portal, logger):
-    components = portal.getSiteManager()
-    if components.__name__ != '++etc++site':
-        components.__name__ = '++etc++site'
-        logger.info('Site manager name changed.')
+def check_type_properties(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    ttool = getToolByName(tool, 'portal_types')
+    for ti in ttool.listTypeInfo():
+        if ti.getProperty('add_view_expr'):
+            continue
+        if ti.getProperty('content_meta_type') == 'Discussion Item':
+            continue
+        return True
+    return False
 
-    if not portal.hasProperty('enable_actionicons'):
-        portal.manage_addProperty('enable_actionicons', False, 'boolean')
-        logger.info("'enable_actionicons' property added.")
+def upgrade_type_properties(tool):
+    """2.1.x to 2.2.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    ttool = getToolByName(tool, 'portal_types')
+    for ti in ttool.listTypeInfo():
+        if ti.getProperty('add_view_expr'):
+            continue
+        if ti.getProperty('content_meta_type') == 'Discussion Item':
+            continue
+        ti._updateProperty('add_view_expr',
+                           'string:${folder_url}/++add++%s'
+                           % quote(ti.getId()))
+        logger.info("TypeInfo '%s' changed." % ti.getId())
 
 _ACTION_ICONS = {'download': 'download_icon.png',
                  'edit': 'edit_icon.png',
@@ -51,16 +100,23 @@
                  'reviewer_queue': 'worklist_icon.png',
                  }
 
-def upgrade_TypeInfos(portal, logger):
-    ttool = portal.portal_types
+def check_action_icons(tool):
+    """2.1.x to 2.2.0 upgrade step checker
+    """
+    ttool = getToolByName(tool, 'portal_types')
     for ti in ttool.listTypeInfo():
+        for ai in ti.listActions():
+            if not ai.getIconExpression() and ai.getId() in _ACTION_ICONS:
+                return True
+    return False
+
+def add_action_icons(tool):
+    """2.1.x to 2.2.0 upgrade step handler
+    """
+    logger = logging.getLogger('GenericSetup.upgrade')
+    ttool = getToolByName(tool, 'portal_types')
+    for ti in ttool.listTypeInfo():
         changed = False
-        if ti.getProperty('content_meta_type') != 'Discussion Item' and \
-                not ti.getProperty('add_view_expr'):
-            ti._updateProperty('add_view_expr',
-                               'string:${folder_url}/++add++%s'
-                               % quote(ti.getId()))
-            changed = True
         for ai in ti.listActions():
             if not ai.getIconExpression() and ai.getId() in _ACTION_ICONS:
                 ai.setIconExpression('string:${portal_url}/%s'



More information about the Checkins mailing list