[Zope-CVS] SVN: GenericSetup/trunk/ When a sequence property is updated in purge="False" mode, don't just

Florent Guillaume fg at nuxeo.com
Thu Jan 19 11:41:08 EST 2006


Log message for revision 41367:
  When a sequence property is updated in purge="False" mode, don't just
  append but also remove duplicates. This gives the same semantics that
  for actions or objects in a folder. This way you can have extension
  profiles that safely add things to an existing property.
  
  

Changed:
  U   GenericSetup/trunk/CHANGES.txt
  U   GenericSetup/trunk/tests/test_utils.py
  U   GenericSetup/trunk/utils.py

-=-
Modified: GenericSetup/trunk/CHANGES.txt
===================================================================
--- GenericSetup/trunk/CHANGES.txt	2006-01-19 16:23:13 UTC (rev 41366)
+++ GenericSetup/trunk/CHANGES.txt	2006-01-19 16:41:08 UTC (rev 41367)
@@ -14,7 +14,8 @@
       created in a separate repository).
 
     - A sequence property with the purge="False" attribute will not be
-      purged. This is useful in extension profiles.
+      purged, but merged (the sequences are treated as sets, which means
+      that duplicates are removed). This is useful in extension profiles.
 
     - Don't export or purge read-only properties. Correctly purge
       non-deletable int/float properties.

Modified: GenericSetup/trunk/tests/test_utils.py
===================================================================
--- GenericSetup/trunk/tests/test_utils.py	2006-01-19 16:23:13 UTC (rev 41366)
+++ GenericSetup/trunk/tests/test_utils.py	2006-01-19 16:41:08 UTC (rev 41367)
@@ -344,28 +344,28 @@
         self.helpers.environ._should_purge = True # base profile
         obj = self.helpers.context
         obj._properties = ()
-        obj.manage_addProperty('lines1', ('A', 'B'), 'lines')
-        obj.manage_addProperty('lines2', ('A', 'B'), 'lines')
-        obj.manage_addProperty('lines3', ('A', 'B'), 'lines')
+        obj.manage_addProperty('lines1', ('Foo', 'Gee'), 'lines')
+        obj.manage_addProperty('lines2', ('Foo', 'Gee'), 'lines')
+        obj.manage_addProperty('lines3', ('Foo', 'Gee'), 'lines')
         self.helpers._initProperties(node)
 
         self.assertEquals(obj.lines1, ('Foo', 'Bar'))
         self.assertEquals(obj.lines2, ('Foo', 'Bar'))
-        self.assertEquals(obj.lines3, ('A', 'B', 'Foo', 'Bar'))
+        self.assertEquals(obj.lines3, ('Gee', 'Foo', 'Bar'))
 
     def test__initProperties_nopurge_extension(self):
         node = parseString(_NOPURGE_IMPORT).documentElement
         self.helpers.environ._should_purge = False # extension profile
         obj = self.helpers.context
         obj._properties = ()
-        obj.manage_addProperty('lines1', ('A', 'B'), 'lines')
-        obj.manage_addProperty('lines2', ('A', 'B'), 'lines')
-        obj.manage_addProperty('lines3', ('A', 'B'), 'lines')
+        obj.manage_addProperty('lines1', ('Foo', 'Gee'), 'lines')
+        obj.manage_addProperty('lines2', ('Foo', 'Gee'), 'lines')
+        obj.manage_addProperty('lines3', ('Foo', 'Gee'), 'lines')
         self.helpers._initProperties(node)
 
         self.assertEquals(obj.lines1, ('Foo', 'Bar'))
         self.assertEquals(obj.lines2, ('Foo', 'Bar'))
-        self.assertEquals(obj.lines3, ('A', 'B', 'Foo', 'Bar'))
+        self.assertEquals(obj.lines3, ('Gee', 'Foo', 'Bar'))
 
 
 class PrettyDocumentTests(unittest.TestCase):

Modified: GenericSetup/trunk/utils.py
===================================================================
--- GenericSetup/trunk/utils.py	2006-01-19 16:23:13 UTC (rev 41366)
+++ GenericSetup/trunk/utils.py	2006-01-19 16:41:08 UTC (rev 41367)
@@ -686,11 +686,14 @@
                 # are converted to the right type
                 prop_value = self._getNodeText(child).encode('utf-8')
 
-            if not self._convertToBoolean(child.getAttribute('purge') or 'True'):
-                # If the purge attribute is false, append to sequence
+            if not self._convertToBoolean(child.getAttribute('purge')
+                                          or 'True'):
+                # If the purge attribute is False, merge sequences
                 prop = obj.getProperty(prop_id)
                 if isinstance(prop, (tuple, list)):
-                    prop_value = tuple(prop) + tuple(prop_value)
+                    prop_value = (tuple([p for p in prop
+                                         if p not in prop_value]) +
+                                  tuple(prop_value))
 
             obj._updateProperty(prop_id, prop_value)
 



More information about the Zope-CVS mailing list