[CalendarServer-changes] [8426] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Mon Dec 12 10:30:42 PST 2011


Revision: 8426
          http://trac.macosforge.org/projects/calendarserver/changeset/8426
Author:   cdaboo at apple.com
Date:     2011-12-12 10:30:42 -0800 (Mon, 12 Dec 2011)
Log Message:
-----------
Allow per-user default alarm properties, and set default on shared calendar to none.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/caldavxml.py
    CalendarServer/trunk/twistedcaldav/ical.py
    CalendarServer/trunk/twistedcaldav/method/put_common.py
    CalendarServer/trunk/twistedcaldav/resource.py
    CalendarServer/trunk/twistedcaldav/sharing.py

Modified: CalendarServer/trunk/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/caldavxml.py	2011-12-12 18:28:54 UTC (rev 8425)
+++ CalendarServer/trunk/twistedcaldav/caldavxml.py	2011-12-12 18:30:42 UTC (rev 8426)
@@ -1079,6 +1079,14 @@
             except ValueError:
                 return False
         
+            # Make sure there is one alarm component
+            try:
+                valarm = tuple(tuple(calendar.subcomponents())[0].subcomponents())[0]
+            except IndexError:
+                return False
+            if valarm.name().upper() != "VALARM":
+                return False
+        
         return True
 
 class DefaultAlarmVEventDateTime (DefaultAlarmBase):

Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py	2011-12-12 18:28:54 UTC (rev 8425)
+++ CalendarServer/trunk/twistedcaldav/ical.py	2011-12-12 18:30:42 UTC (rev 8426)
@@ -2079,10 +2079,13 @@
             if calendar is None:
                 return False
         except ValueError:
-            return
+            return False
 
-        valarm = tuple(tuple(calendar.subcomponents())[0].subcomponents())[0]
-        
+        try:
+            valarm = tuple(tuple(calendar.subcomponents())[0].subcomponents())[0]
+        except IndexError:
+            return False
+
         changed = False
         for component in self.subcomponents():
             if component.name().upper() not in ("VEVENT", "VTODO",):

Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py	2011-12-12 18:28:54 UTC (rev 8425)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py	2011-12-12 18:30:42 UTC (rev 8426)
@@ -765,6 +765,10 @@
         if not self.destinationcal or self.destination.exists() or self.isiTIP:
             return False
         
+        # Never add default alarms to calendar data in shared calendars
+        if self.destinationparent.isVirtualShare():
+            return False
+
         # Add default alarm for VEVENT and VTODO only
         mtype = self.calendar.mainType().upper()
         if self.calendar.mainType().upper() not in ("VEVENT", "VTODO"):

Modified: CalendarServer/trunk/twistedcaldav/resource.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/resource.py	2011-12-12 18:28:54 UTC (rev 8425)
+++ CalendarServer/trunk/twistedcaldav/resource.py	2011-12-12 18:30:42 UTC (rev 8426)
@@ -511,15 +511,14 @@
     @inlineCallbacks
     def _hasSharedProperty(self, qname, request):
 
-            # Always have disabled default alarms on shared calendars
+        # Always have default alarms on shared calendars
         if qname in (
             caldavxml.DefaultAlarmVEventDateTime.qname(),
             caldavxml.DefaultAlarmVEventDate.qname(),
             caldavxml.DefaultAlarmVToDoDateTime.qname(),
             caldavxml.DefaultAlarmVToDoDate.qname(),
-        ):
-            if self.isCalendarCollection():
-                returnValue(True)
+        ) and self.isCalendarCollection():
+            returnValue(True)
 
         ownerPrincipal = (yield self.resourceOwnerPrincipal(request))
         p = self.deadProperties().contains(qname, uid=ownerPrincipal.principalUID())
@@ -590,23 +589,6 @@
     @inlineCallbacks
     def _readSharedProperty(self, qname, request):
 
-        # Validate default alarm properties (do this even if the default alarm feature is off)
-        if qname in (
-            caldavxml.DefaultAlarmVEventDateTime.qname(),
-            caldavxml.DefaultAlarmVEventDate.qname(),
-            caldavxml.DefaultAlarmVToDoDateTime.qname(),
-            caldavxml.DefaultAlarmVToDoDate.qname(),
-        ):
-            if self.isCalendarCollection():
-                # Always disable default alarms on shared calendars
-                propclass = {
-                    caldavxml.DefaultAlarmVEventDateTime.qname() : caldavxml.DefaultAlarmVEventDateTime,
-                    caldavxml.DefaultAlarmVEventDate.qname()     : caldavxml.DefaultAlarmVEventDate,
-                    caldavxml.DefaultAlarmVToDoDateTime.qname()  : caldavxml.DefaultAlarmVToDoDateTime,
-                    caldavxml.DefaultAlarmVToDoDate.qname()      : caldavxml.DefaultAlarmVToDoDate,
-                }[qname]
-                returnValue(propclass.fromString(""))
-
         # Default behavior - read per-user dead property
         ownerPrincipal = (yield self.resourceOwnerPrincipal(request))
         p = self.deadProperties().get(qname, uid=ownerPrincipal.principalUID())
@@ -775,7 +757,7 @@
                 ))
             if not property.valid():
                 raise HTTPError(ErrorResponse(
-                    responsecode.CONFLICT,
+                    responsecode.FORBIDDEN,
                     (caldav_namespace, "valid-calendar-data"),
                     description="Invalid property"
                 ))
@@ -793,13 +775,6 @@
                     "Property %s may only be set on calendar or home collection." % (property,)
                 ))
                 
-            # Do not allow default alarms by sharees
-            if isShare:
-                raise HTTPError(StatusResponse(
-                    responsecode.FORBIDDEN,
-                    "Property %s is protected on shared calendar collections." % (property,)
-                ))
-                
             if not property.valid():
                 raise HTTPError(ErrorResponse(
                     responsecode.CONFLICT,
@@ -2068,10 +2043,6 @@
         
         if self.isCalendarCollection():
             
-            # Sharees never have default alarms
-            if self.isVirtualShare():
-                return None
-            
             # Get from calendar or inherit from home
             try:
                 prop = self.deadProperties().get(propname.qname())

Modified: CalendarServer/trunk/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/sharing.py	2011-12-12 18:28:54 UTC (rev 8425)
+++ CalendarServer/trunk/twistedcaldav/sharing.py	2011-12-12 18:30:42 UTC (rev 8426)
@@ -1041,9 +1041,13 @@
         if displayname:
             yield sharedCollection.writeProperty(davxml.DisplayName.fromString(displayname), request)
         
-        # Calendars always start out transparent
+        # Calendars always start out transparent and with empty default alarms
         if not oldShare and sharedCollection.isCalendarCollection():
             yield sharedCollection.writeProperty(caldavxml.ScheduleCalendarTransp(caldavxml.Transparent()), request)
+            yield sharedCollection.writeProperty(caldavxml.DefaultAlarmVEventDateTime.fromString(""), request)
+            yield sharedCollection.writeProperty(caldavxml.DefaultAlarmVEventDate.fromString(""), request)
+            yield sharedCollection.writeProperty(caldavxml.DefaultAlarmVToDoDateTime.fromString(""), request)
+            yield sharedCollection.writeProperty(caldavxml.DefaultAlarmVToDoDate.fromString(""), request)
  
         # Notify client of changes
         yield self.notifyChanged()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111212/5bba1f7a/attachment-0001.html>


More information about the calendarserver-changes mailing list