Mailing List Archive

SVN: GenericSetup/trunk/ When a sequence property is updated in purge="False" mode, don't just
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)


_______________________________________________
Zope-CVS maillist - Zope-CVS@zope.org
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS