[CalendarServer-changes] [3588] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Mon Jan 12 12:01:28 PST 2009
Revision: 3588
http://trac.macosforge.org/projects/calendarserver/changeset/3588
Author: cdaboo at apple.com
Date: 2009-01-12 12:01:27 -0800 (Mon, 12 Jan 2009)
Log Message:
-----------
Make sure an iTIP implicit CANCEL of an attendee's event properly updates the quota for the attendee's calendar.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/method/delete.py
CalendarServer/trunk/twistedcaldav/method/delete_common.py
CalendarServer/trunk/twistedcaldav/scheduling/processing.py
Modified: CalendarServer/trunk/twistedcaldav/method/delete.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/delete.py 2009-01-12 19:58:28 UTC (rev 3587)
+++ CalendarServer/trunk/twistedcaldav/method/delete.py 2009-01-12 20:01:27 UTC (rev 3588)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@
yield parent.authorize(request, (davxml.Unbind(),))
# Do smart delete taking into account the need to do implicit CANCELs etc
- deleter = DeleteResource(request, self, parent, depth)
+ deleter = DeleteResource(request, self, request.uri, parent, depth)
response = (yield deleter.run())
returnValue(response)
Modified: CalendarServer/trunk/twistedcaldav/method/delete_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/delete_common.py 2009-01-12 19:58:28 UTC (rev 3587)
+++ CalendarServer/trunk/twistedcaldav/method/delete_common.py 2009-01-12 20:01:27 UTC (rev 3588)
@@ -1,5 +1,5 @@
##
-# Copyright (c) 2006-2008 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -39,12 +39,14 @@
class DeleteResource(object):
- def __init__(self, request, resource, parent, depth):
+ def __init__(self, request, resource, resource_uri, parent, depth, internal_request=False):
self.request = request
self.resource = resource
+ self.resource_uri = resource_uri
self.parent = parent
self.depth = depth
+ self.internal_request = internal_request
@inlineCallbacks
def deleteResource(self, delresource, deluri, parent):
@@ -107,15 +109,15 @@
else:
old_size = 0
- # Get data we need for implicit scheduling
- calendar = delresource.iCalendar()
- scheduler = ImplicitScheduler()
- do_implicit_action, _ignore = (yield scheduler.testImplicitSchedulingDELETE(self.request, delresource, calendar))
- if do_implicit_action:
- lock = MemcacheLock("ImplicitUIDLock", calendar.resourceUID(), timeout=60.0)
- else:
- scheduler = None
- lock = None
+ scheduler = None
+ lock = None
+ if not self.internal_request:
+ # Get data we need for implicit scheduling
+ calendar = delresource.iCalendar()
+ scheduler = ImplicitScheduler()
+ do_implicit_action, _ignore = (yield scheduler.testImplicitSchedulingDELETE(self.request, delresource, calendar))
+ if do_implicit_action:
+ lock = MemcacheLock("ImplicitUIDLock", calendar.resourceUID(), timeout=60.0)
try:
if lock:
@@ -205,7 +207,7 @@
log.debug("Deleting collection %s" % (self.resource.fp.path,))
- errors = ResponseQueue(self.request.uri, "DELETE", responsecode.NO_CONTENT)
+ errors = ResponseQueue(self.resource_uri, "DELETE", responsecode.NO_CONTENT)
@inlineCallbacks
def doDeleteCalendar(delresource, deluri):
@@ -220,10 +222,10 @@
returnValue(True)
- yield applyToCalendarCollections(self.resource, self.request, self.request.uri, self.depth, doDeleteCalendar, None)
+ yield applyToCalendarCollections(self.resource, self.request, self.resource_uri, self.depth, doDeleteCalendar, None)
# Now do normal delete
- more_responses = (yield self.deleteResource(self.resource, self.request.uri, self.parent))
+ more_responses = (yield self.deleteResource(self.resource, self.resource_uri, self.parent))
if isinstance(more_responses, MultiStatusResponse):
# Merge errors
@@ -237,15 +239,15 @@
def run(self):
if isCalendarCollectionResource(self.parent):
- response = (yield self.deleteCalendarResource(self.resource, self.request.uri, self.parent))
+ response = (yield self.deleteCalendarResource(self.resource, self.resource_uri, self.parent))
elif isCalendarCollectionResource(self.resource):
- response = (yield self.deleteCalendar(self.resource, self.request.uri, self.parent))
+ response = (yield self.deleteCalendar(self.resource, self.resource_uri, self.parent))
elif self.resource.isCollection():
response = (yield self.deleteCollection())
else:
- response = (yield self.deleteResource(self.resource, self.request.uri, self.parent))
+ response = (yield self.deleteResource(self.resource, self.resource_uri, self.parent))
returnValue(response)
Modified: CalendarServer/trunk/twistedcaldav/scheduling/processing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/processing.py 2009-01-12 19:58:28 UTC (rev 3587)
+++ CalendarServer/trunk/twistedcaldav/scheduling/processing.py 2009-01-12 20:01:27 UTC (rev 3588)
@@ -17,7 +17,6 @@
from hashlib import md5
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks, returnValue, succeed
-from twisted.web2.dav.fileop import delete
from twisted.web2.dav.method.report import NumberOfMatchesWithinLimits
from twisted.web2.dav.util import joinURL
from twistedcaldav import customxml, caldavxml
@@ -365,7 +364,7 @@
# Delete the attendee's copy of the event
log.debug("ImplicitProcessing - originator '%s' to recipient '%s' processing METHOD:CANCEL, UID: '%s' - deleting entire event" % (self.originator.cuaddr, self.recipient.cuaddr, self.uid))
- yield self.deleteCalendarResource(self.recipient_calendar_collection, self.recipient_calendar_name)
+ yield self.deleteCalendarResource(self.recipient_calendar_collection_uri, self.recipient_calendar_collection, self.recipient_calendar_name)
# Build the schedule-changes XML element
changes = customxml.ScheduleChanges(
@@ -588,24 +587,26 @@
returnValue(newchild)
@inlineCallbacks
- def deleteCalendarResource(self, collection, name):
+ def deleteCalendarResource(self, collURL, collection, name):
"""
Delete the calendar resource in the specified calendar.
- @param collection: the L{CalDAVFile} for the calendar collection to store the resource in.
- @param name: the C{str} for the resource name to write into, or {None} to write a new resource.
- @return: L{Deferred}
+ @param collURL: the URL of the calendar collection.
+ @type name: C{str}
+ @param collection: the calendar collection to delete the resource from.
+ @type collection: L{CalDAVFile}
+ @param name: the resource name to write into, or {None} to write a new resource.
+ @type name: C{str}
"""
+ from twistedcaldav.method.delete_common import DeleteResource
delchild = collection.getChild(name)
- index = collection.index()
- index.deleteResource(delchild.fp.basename())
-
- yield delete("", delchild.fp, "0")
-
- # Change CTag on the parent calendar collection
- yield collection.updateCTag()
+ childURL = joinURL(collURL, name)
+ self.request._rememberResource(delchild, childURL)
+ deleter = DeleteResource(self.request, delchild, childURL, collection, "0", internal_request=True)
+ yield deleter.run()
+
def changeAttendeePartstat(self, attendees, partstat):
"""
Change the PARTSTAT on any ATTENDEE properties passed in.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090112/80d5ac47/attachment.html>
More information about the calendarserver-changes
mailing list