[CalendarServer-changes] [11973] CalendarServer/trunk/txdav/base/propertystore
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:18:22 PDT 2014
Revision: 11973
http://trac.calendarserver.org//changeset/11973
Author: cdaboo at apple.com
Date: 2013-11-19 12:50:59 -0800 (Tue, 19 Nov 2013)
Log Message:
-----------
Fix issue seen when migrating a user with a shared calendar and a shadowed timezone property.
Modified Paths:
--------------
CalendarServer/trunk/txdav/base/propertystore/base.py
CalendarServer/trunk/txdav/base/propertystore/test/base.py
Modified: CalendarServer/trunk/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/base.py 2013-11-19 20:47:47 UTC (rev 11972)
+++ CalendarServer/trunk/txdav/base/propertystore/base.py 2013-11-19 20:50:59 UTC (rev 11973)
@@ -214,7 +214,13 @@
def __delitem__(self, key):
# Handle per-user behavior
- if self.isGlobalProperty(key):
+ if self.isShadowableProperty(key):
+ try:
+ self._delitem_uid(key, self._perUser)
+ except KeyError:
+ # It is OK for shadowable delete to fail
+ pass
+ elif self.isGlobalProperty(key):
self._delitem_uid(key, self._defaultUser)
else:
self._delitem_uid(key, self._perUser)
Modified: CalendarServer/trunk/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/base.py 2013-11-19 20:47:47 UTC (rev 11972)
+++ CalendarServer/trunk/txdav/base/propertystore/test/base.py 2013-11-19 20:50:59 UTC (rev 11973)
@@ -206,6 +206,41 @@
@inlineCallbacks
+ def test_peruserShadow_delete(self):
+ """
+ Delete a shadowable property that has not been overridden by the sharee.
+ """
+
+ name = propertyName("shadow")
+
+ self.propertyStore1.setSpecialProperties((name,), ())
+ self.propertyStore2.setSpecialProperties((name,), ())
+
+ value1 = propertyValue("Hello, World1!")
+
+ self.propertyStore1[name] = value1
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+
+ del self.propertyStore2[name]
+ yield self._changed(self.propertyStore2)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+
+ del self.propertyStore1[name]
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+
+
+ @inlineCallbacks
def test_peruser_global(self):
name = propertyName("global")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/36f12a43/attachment.html>
More information about the calendarserver-changes
mailing list