[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - avoid write-on-read

Yvo Schubbe y.2009 at wcm-solutions.de
Sat Dec 5 05:29:47 EST 2009


Log message for revision 106215:
  - avoid write-on-read

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

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2009-12-05 09:41:23 UTC (rev 106214)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2009-12-05 10:29:47 UTC (rev 106215)
@@ -4,6 +4,9 @@
 2.2.0-beta (unreleased)
 -----------------------
 
+- MetadataTool: Improved tool initialization.
+  This prevents write-on-read behavior of newly created tool instances.
+
 - views: Improved ContentAddFormBase.
   Permissions and container constraints are now checked by the '__call__'
   method. There is no need to add security declarations for derived add forms.

Modified: Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py	2009-12-05 09:41:23 UTC (rev 106214)
+++ Products.CMFDefault/trunk/Products/CMFDefault/MetadataTool.py	2009-12-05 10:29:47 UTC (rev 106215)
@@ -324,7 +324,7 @@
         """
         # Don't replace.
         if self.element_specs.has_key( element ):
-           return
+            return
 
         self.element_specs[ element ] = ElementSpec( is_multi_valued )
 
@@ -377,7 +377,9 @@
 
     _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 )
 
@@ -410,7 +412,8 @@
 
     def __init__( self, publisher=None ):
 
-        self.editProperties( publisher )
+        self.editProperties(publisher)
+        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-05 09:41:23 UTC (rev 106214)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MetadataTool.py	2009-12-05 10:29:47 UTC (rev 106215)
@@ -485,6 +485,7 @@
         from Products.CMFDefault.MetadataTool import ElementSpec
 
         tool = self._makeOne()
+        tool._DCMI = None
         tool.element_specs = { 'Title' : ElementSpec( 0 )
                              , 'Description' : ElementSpec( 0 )
                              , 'Subject' : ElementSpec( 1 )



More information about the checkins mailing list