[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