[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - MetadataTool: Replaced write-on-read upgrade for the Dublin Core
Jens Vagelpohl
jens at dataflake.org
Wed Dec 9 06:36:56 EST 2009
Log message for revision 106327:
- MetadataTool: Replaced write-on-read upgrade for the Dublin Core
metadata definitions with a set of GenericSetup upgrade steps.
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
U Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py
U Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MetadataTool.py
U Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
A Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to20.py
U Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt 2009-12-09 11:36:40 UTC (rev 106326)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt 2009-12-09 11:36:55 UTC (rev 106327)
@@ -4,7 +4,10 @@
2.3.0-alpha (unreleased)
------------------------
+- MetadataTool: Replaced write-on-read upgrade for the Dublin Core
+ metadata definitions with a set of GenericSetup upgrade steps.
+
2.2.0-beta (2009-12-06)
-----------------------
Modified: Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py 2009-12-09 11:36:40 UTC (rev 106326)
+++ Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py 2009-12-09 11:36:55 UTC (rev 106327)
@@ -375,34 +375,6 @@
id = 'portal_metadata'
meta_type = 'Default Metadata Tool'
- _DCMI = None
- def _get_DCMI( self ):
- # BBB: for metadata tools created with CMF 1.6 (or older) and
- # for never used metadata tools created with CMF 2.0 or CMF 2.1
- # XXX: this should be replaced by upgrade steps
- if self._DCMI is None:
- dcmi = self._DCMI = MetadataSchema( 'DCMI', _DCMI_ELEMENT_SPECS )
-
- old_specs = getattr( self, 'element_specs', None )
- if old_specs is not None:
- del self.element_specs
- for element_id, old_spec in old_specs.items():
- new_spec = dcmi.getElementSpec( element_id )
- for typ, policy in old_spec.listPolicies():
- if typ is not None:
- new_spec.addPolicy( typ )
- tp = new_spec.getPolicy( typ )
- tp.edit( is_required=policy.isRequired()
- , supply_default=policy.supplyDefault()
- , default_value=policy.defaultValue()
- , enforce_vocabulary=policy.enforceVocabulary()
- , allowed_vocabulary=policy.allowedVocabulary()
- )
-
- return self._DCMI
-
- DCMI = property(_get_DCMI, None)
-
#
# Default values.
#
@@ -413,7 +385,7 @@
def __init__( self, publisher=None ):
self.editProperties(publisher)
- self._DCMI = MetadataSchema('DCMI', _DCMI_ELEMENT_SPECS)
+ self.DCMI = MetadataSchema('DCMI', _DCMI_ELEMENT_SPECS)
#
# ZMI methods
Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MetadataTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MetadataTool.py 2009-12-09 11:36:40 UTC (rev 106326)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MetadataTool.py 2009-12-09 11:36:55 UTC (rev 106327)
@@ -480,48 +480,7 @@
tool.removeSchema( 'Arbitrary' )
self.assertRaises( KeyError, tool.removeSchema, 'Arbitrary' )
- def test_migration( self ):
- # Test that we forward-migrate old-style DCMI policies.
- from Products.CMFDefault.MetadataTool import ElementSpec
- tool = self._makeOne()
- tool._DCMI = None
- tool.element_specs = { 'Title' : ElementSpec( 0 )
- , 'Description' : ElementSpec( 0 )
- , 'Subject' : ElementSpec( 1 )
- , 'Format' : ElementSpec( 0 )
- , 'Language' : ElementSpec( 0 )
- , 'Rights' : ElementSpec( 0 )
- }
- subj = tool.element_specs[ 'Subject' ]
- subj.addPolicy( 'Foo' )
- subj.getPolicy( 'Foo' ).edit( False
- , False
- , None
- , True
- , ( 'bar', 'baz' )
- )
-
- dcmi = tool.DCMI
-
- self.assertEqual( dcmi.getId(), 'DCMI' )
-
- # Accessing the DCMI property converts and clears 'element_specs'
- self.assertRaises(AttributeError, lambda: tool.element_specs )
-
- subj2 = dcmi.getElementSpec( 'Subject' )
- subj_default = subj2.getPolicy( None )
- subj_foo = subj2.getPolicy( 'Foo' )
-
- self.assertEqual( subj_foo.isRequired(), False )
- self.assertEqual( subj_foo.supplyDefault(), False )
- self.assertEqual( subj_foo.defaultValue(), None )
- self.assertEqual( subj_foo.enforceVocabulary(), True )
- self.assertEqual( len( subj_foo.allowedVocabulary() ), 2 )
- self.failUnless( 'bar' in subj_foo.allowedVocabulary() )
- self.failUnless( 'baz' in subj_foo.allowedVocabulary() )
-
-
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestMetadataElementPolicy),
Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml 2009-12-09 11:36:40 UTC (rev 106326)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/configure.zcml 2009-12-09 11:36:55 UTC (rev 106327)
@@ -3,20 +3,34 @@
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="cmf_default">
+ <genericsetup:upgradeSteps
+ source="*"
+ destination="2.0"
+ profile="Products.CMFDefault:default"
+ sortkey="1">
+
+ <genericsetup:upgradeStep
+ title="Upgrade Dublin Core metadata definitions"
+ handler=".to20.upgrade_dcmi_metadata"
+ checker=".to20.check_dcmi_metadata"
+ />
+
+ </genericsetup:upgradeSteps>
+
<genericsetup:upgradeStep
title="Mark 2.0 upgrade as finished"
source="*"
destination="2.0"
profile="Products.CMFDefault:default"
handler=".mark_as_finished"
- sortkey="1"
+ sortkey="2"
/>
<genericsetup:upgradeSteps
source="2.0"
destination="2.1"
profile="Products.CMFDefault:default"
- sortkey="2">
+ sortkey="3">
<genericsetup:upgradeStep
title="Add root site manager"
@@ -50,14 +64,14 @@
destination="2.1"
profile="Products.CMFDefault:default"
handler=".mark_as_finished"
- sortkey="3"
+ sortkey="4"
/>
<genericsetup:upgradeSteps
source="2.1"
destination="2.2"
profile="Products.CMFDefault:default"
- sortkey="4">
+ sortkey="5">
<genericsetup:upgradeStep
title="Upgrade setup tool"
@@ -107,6 +121,12 @@
checker=".to22.check_catalog_columns"
/>
+ <genericsetup:upgradeStep
+ title="Upgrade Dublin Core metadata definitions"
+ handler=".to22.upgrade_dcmi_metadata"
+ checker=".to22.check_dcmi_metadata"
+ />
+
</genericsetup:upgradeSteps>
<genericsetup:upgradeStep
@@ -115,7 +135,7 @@
destination="2.2"
profile="Products.CMFDefault:default"
handler=".mark_as_finished"
- sortkey="5"
+ sortkey="6"
/>
</configure>
Copied: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to20.py (from rev 106324, Products.CMFDefault/branches/2.2/Products/CMFDefault/upgrade/to20.py)
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to20.py (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to20.py 2009-12-09 11:36:55 UTC (rev 106327)
@@ -0,0 +1,53 @@
+##############################################################################
+#
+# Copyright (c) 2009 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Upgrade steps to CMFDefault 2.0.
+
+$Id$
+"""
+import logging
+
+from Acquisition import aq_base
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.MetadataTool import _DCMI_ELEMENT_SPECS
+from Products.CMFDefault.MetadataTool import MetadataSchema
+
+
+def check_dcmi_metadata(tool):
+ """1.6.x to 2.0.0 upgrade step checker
+ """
+ metadata_tool = getToolByName(tool, 'portal_metadata')
+ return getattr(aq_base(metadata_tool), 'element_specs', None) is not None
+
+def upgrade_dcmi_metadata(tool):
+ """1.6.x to 2.0.0 upgrade step handler
+ """
+ logger = logging.getLogger('GenericSetup.upgrade')
+ metadata_tool = getToolByName(tool, 'portal_metadata')
+ old_specs = getattr(metadata_tool, 'element_specs', None)
+ if old_specs is not None:
+ del metadata_tool.element_specs
+ dcmi = metadata_tool._DCMI = MetadataSchema('DCMI', _DCMI_ELEMENT_SPECS)
+ for element_id, old_spec in old_specs.items():
+ new_spec = dcmi.getElementSpec(element_id)
+ for typ, policy in old_spec.listPolicies():
+ if typ is not None:
+ new_spec.addPolicy(typ)
+ tp = new_spec.getPolicy(typ)
+ tp.edit( is_required=policy.isRequired()
+ , supply_default=policy.supplyDefault()
+ , default_value=policy.defaultValue()
+ , enforce_vocabulary=policy.enforceVocabulary()
+ , allowed_vocabulary=policy.allowedVocabulary()
+ )
+ logger.info('Dublin Core metadata definition updated.')
Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py 2009-12-09 11:36:40 UTC (rev 106326)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to22.py 2009-12-09 11:36:55 UTC (rev 106327)
@@ -17,6 +17,7 @@
import logging
from urllib import quote
+from Acquisition import aq_base
from Acquisition import aq_inner
from Acquisition import aq_parent
from zope.component.interfaces import ComponentLookupError
@@ -298,3 +299,20 @@
if 'getIconURL' not in columns:
ctool.addColumn('getIconURL')
logger.info("Catalog column 'getIconURL' added.")
+
+def check_dcmi_metadata(tool):
+ """2.1.x to 2.2.0 upgrade step checker
+ """
+ metadata_tool = getToolByName(tool, 'portal_metadata')
+ return getattr(aq_base(metadata_tool), '_DCMI', None) is not None
+
+def upgrade_dcmi_metadata(tool):
+ """2.1.x to 2.2.0 upgrade step handler
+ """
+ logger = logging.getLogger('GenericSetup.upgrade')
+ metadata_tool = getToolByName(tool, 'portal_metadata')
+ dcmi = metadata_tool._DCMI
+ del metadata_tool._DCMI
+ metadata_tool.DCMI = dcmi
+ logger.info('Dublin Core metadata definition updated.')
+
More information about the checkins
mailing list