[CalendarServer-changes] [4203] CalendarServer/branches/release/CalendarServer-2.2-dev
source_changes at macosforge.org
source_changes at macosforge.org
Thu May 7 13:29:47 PDT 2009
Revision: 4203
http://trac.macosforge.org/projects/calendarserver/changeset/4203
Author: wsanchez at apple.com
Date: 2009-05-07 13:29:47 -0700 (Thu, 07 May 2009)
Log Message:
-----------
Pulled up r4194 from trunk.
Modified Paths:
--------------
CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/instance.py
CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py
CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/processing.py
CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/test/test_icalendar.py
Property Changed:
----------------
CalendarServer/branches/release/CalendarServer-2.2-dev/
CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.txt
CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.xml
CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.txt
CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.xml
Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/trunk:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180
+ /CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/trunk:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4194
Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.txt
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180
+ /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4194
Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.xml
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180
+ /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4194
Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.txt
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180
+ /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4194
Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.xml
___________________________________________________________________
Modified: svn:mergeinfo
- /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180
+ /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4194
Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/instance.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/instance.py 2009-05-07 07:07:12 UTC (rev 4202)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/instance.py 2009-05-07 20:29:47 UTC (rev 4203)
@@ -36,6 +36,14 @@
def __repr__(self):
return "<%s max:%s>" % (self.__class__.__name__, self.max_allowed)
+class InvalidOverriddenInstanceError(Exception):
+ def __init__(self, rid):
+ Exception.__init__(self)
+ self.rid = rid
+
+ def __repr__(self):
+ return "<%s invalid:%s>" % (self.__class__.__name__, self.rid)
+
class Instance(object):
__slots__ = ["component", "start", "end", "rid", "overridden", "future"]
@@ -115,6 +123,7 @@
"""
# Look at each component type
+ got_master = False
overrides = []
for component in componentSet:
if component.name() == "VEVENT":
@@ -122,11 +131,13 @@
overrides.append(component)
else:
self._addMasterEventComponent(component, limit)
+ got_master = True
elif component.name() == "VTODO":
if component.hasProperty("RECURRENCE-ID"):
overrides.append(component)
else:
self._addMasterToDoComponent(component, limit)
+ got_master = True
elif component.name() == "VJOURNAL":
#TODO: VJOURNAL
raise NotImplementedError("VJOURNAL recurrence expansion not supported yet")
@@ -140,18 +151,19 @@
else:
# AVAILABLE components are just like VEVENT components
self._addMasterEventComponent(component, limit)
+ got_master = True
for component in overrides:
if component.name() == "VEVENT":
- self._addOverrideEventComponent(component)
+ self._addOverrideEventComponent(component, limit, got_master)
elif component.name() == "VTODO":
- self._addOverrideToDoComponent(component)
+ self._addOverrideToDoComponent(component, limit, got_master)
elif component.name() == "VJOURNAL":
#TODO: VJOURNAL
raise NotImplementedError("VJOURNAL recurrence expansion not supported yet")
elif component.name() == "AVAILABLE":
# AVAILABLE components are just like VEVENT components
- self._addOverrideEventComponent(component)
+ self._addOverrideEventComponent(component, limit, got_master)
def addInstance(self, instance):
"""
@@ -191,12 +203,12 @@
self._addMasterComponent(component, limit, start, end, duration)
- def _addOverrideEventComponent(self, component):
+ def _addOverrideEventComponent(self, component, limit, got_master):
"""
Add the specified overridden VEVENT Component to the instance list, replacing
the one generated by the master component.
@param component: the overridden Component.
- @param limit: the end datetime.datetime for expansion.
+ @param got_master: whether a master component has already been expanded.
"""
#TODO: This does not take into account THISANDPRIOR - only THISANDFUTURE
@@ -218,7 +230,7 @@
else:
duration = differenceDateTime(start, end)
- self._addOverrideComponent(component, start, end)
+ self._addOverrideComponent(component, limit, start, end, got_master)
def _addMasterToDoComponent(self, component, limit):
"""
@@ -241,12 +253,12 @@
self._addMasterComponent(component, limit, start, due, duration)
- def _addOverrideToDoComponent(self, component):
+ def _addOverrideToDoComponent(self, component, limit, got_master):
"""
Add the specified overridden VTODO Component to the instance list, replacing
the one generated by the master component.
@param component: the overridden Component.
- @param limit: the end datetime.datetime for expansion.
+ @param got_master: whether a master component has already been expanded.
"""
#TODO: This does not take into account THISANDPRIOR - only THISANDFUTURE
@@ -262,7 +274,7 @@
elif due is None:
due = start
- self._addOverrideComponent(component, start, due)
+ self._addOverrideComponent(component, limit, start, due, got_master)
def _addMasterComponent(self, component, limit, start, end, duration):
# Always add first instance if included in range.
@@ -294,7 +306,7 @@
endDate = normalizeForIndex(endDate)
self.addInstance(Instance(component, startDate, endDate))
- def _addOverrideComponent(self, component, start, end):
+ def _addOverrideComponent(self, component, limit, start, end, got_master):
# Get the recurrence override info
rid = component.getRecurrenceIDUTC()
@@ -304,6 +316,16 @@
start = normalizeForIndex(start)
end = normalizeForIndex(end)
rid = normalizeForIndex(rid)
+
+ # Make sure start is within the limit
+ if compareDateTime(start, limit) > 0 and compareDateTime(rid, limit) > 0:
+ return
+
+ # Make sure override RECURRENCE-ID is a valid instance of the master
+ if got_master:
+ if str(rid) not in self.instances:
+ raise InvalidOverriddenInstanceError(str(rid))
+
self.addInstance(Instance(component, start, end, rid, True, range))
# Handle THISANDFUTURE if present
Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py 2009-05-07 07:07:12 UTC (rev 4202)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py 2009-05-07 20:29:47 UTC (rev 4203)
@@ -57,7 +57,8 @@
from twistedcaldav.fileops import copyWithXAttrs
from twistedcaldav.ical import Component, Property
from twistedcaldav.index import ReservationError
-from twistedcaldav.instance import TooManyInstancesError
+from twistedcaldav.instance import TooManyInstancesError,\
+ InvalidOverriddenInstanceError
from twistedcaldav.log import Logger
from twistedcaldav.memcachelock import MemcacheLock, MemcacheLockTimeoutError
from twistedcaldav.scheduling.implicit import ImplicitScheduler
@@ -1082,4 +1083,12 @@
if self.rollback:
self.rollback.Rollback()
- raise err
+ if isinstance(err, InvalidOverriddenInstanceError):
+ raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+ elif isinstance(err, TooManyInstancesError):
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ NumberOfRecurrencesWithinLimits(PCDATAElement(str(err.max_allowed)))
+ ))
+ else:
+ raise err
Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/processing.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/processing.py 2009-05-07 07:07:12 UTC (rev 4202)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/processing.py 2009-05-07 20:29:47 UTC (rev 4203)
@@ -274,7 +274,7 @@
log.error("No default calendar for recipient: '%s'." % (self.recipient.cuaddr,))
raise ImplicitProcessorException(iTIPRequestStatus.NO_USER_SUPPORT)
- log.debug("ImplicitProcessing - originator '%s' to recipient '%s' ignoring METHOD:REQUEST, UID: '%s' - new processed" % (self.originator.cuaddr, self.recipient.cuaddr, self.uid))
+ log.debug("ImplicitProcessing - originator '%s' to recipient '%s' processing METHOD:REQUEST, UID: '%s' - new processed" % (self.originator.cuaddr, self.recipient.cuaddr, self.uid))
autoprocessed = (yield self.recipient.principal.getAutoSchedule())
new_calendar = iTipProcessing.processNewRequest(self.message, self.recipient.cuaddr, autoprocessing=autoprocessed)
name = md5(str(new_calendar) + str(time.time()) + default.fp.path).hexdigest() + ".ics"
Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/test/test_icalendar.py 2009-05-07 07:07:12 UTC (rev 4202)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/test/test_icalendar.py 2009-05-07 20:29:47 UTC (rev 4203)
@@ -24,6 +24,7 @@
from twistedcaldav.ical import Component, parse_date, parse_datetime,\
parse_date_or_datetime, parse_duration, Property
+from twistedcaldav.instance import InvalidOverriddenInstanceError
import twistedcaldav.test.util
from vobject.icalendar import utc
@@ -1532,14 +1533,62 @@
datetime.datetime(2007, 11, 16, 0, 0, 0, tzinfo=tzutc()),
)
),
+ (
+ "Recurring with override",
+ """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890-1
+DTSTART:20071114T000000Z
+DURATION:P1H
+RRULE:FREQ=DAILY;COUNT=2
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890-1
+RECURRENCE-ID:20071115T000000Z
+DTSTART:20071115T010000Z
+DURATION:P1H
+END:VEVENT
+END:VCALENDAR
+""",
+ (
+ datetime.datetime(2007, 11, 14, 0, 0, 0, tzinfo=tzutc()),
+ datetime.datetime(2007, 11, 15, 1, 0, 0, tzinfo=tzutc()),
+ )
+ ),
+ (
+ "Recurring with invalid override",
+ """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890-1
+DTSTART:20071114T000000Z
+DURATION:P1H
+RRULE:FREQ=DAILY;COUNT=2
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890-1
+RECURRENCE-ID:20071115T010000Z
+DTSTART:20071115T000000Z
+DURATION:P1H
+END:VEVENT
+END:VCALENDAR
+""",
+ None
+ ),
)
for description, original, results in data:
component = Component.fromString(original)
- instances = component.expandTimeRanges(datetime.date(2100, 1, 1))
- self.assertTrue(len(instances.instances) == len(results), "%s: wrong number of instances" % (description,))
- for instance in instances:
- self.assertTrue(instances[instance].start in results, "%s: %s missing" % (description, instance,))
+ if results is None:
+ self.assertRaises(InvalidOverriddenInstanceError, component.expandTimeRanges, datetime.date(2100, 1, 1))
+ else:
+ instances = component.expandTimeRanges(datetime.date(2100, 1, 1))
+ self.assertTrue(len(instances.instances) == len(results), "%s: wrong number of instances" % (description,))
+ for instance in instances:
+ self.assertTrue(instances[instance].start in results, "%s: %s missing" % (description, instance,))
def test_has_property_in_any_component(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090507/44fe63ce/attachment-0001.html>
More information about the calendarserver-changes
mailing list