[CalendarServer-changes] [5690] CalendarServer/branches/new-store/twistedcaldav/method/delete_common .py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jun 4 15:13:22 PDT 2010
Revision: 5690
http://trac.macosforge.org/projects/calendarserver/changeset/5690
Author: glyph at apple.com
Date: 2010-06-04 15:13:19 -0700 (Fri, 04 Jun 2010)
Log Message:
-----------
if this error happens I want to hear about it
Modified Paths:
--------------
CalendarServer/branches/new-store/twistedcaldav/method/delete_common.py
Modified: CalendarServer/branches/new-store/twistedcaldav/method/delete_common.py
===================================================================
--- CalendarServer/branches/new-store/twistedcaldav/method/delete_common.py 2010-06-04 22:12:16 UTC (rev 5689)
+++ CalendarServer/branches/new-store/twistedcaldav/method/delete_common.py 2010-06-04 22:13:19 UTC (rev 5690)
@@ -35,17 +35,17 @@
from twistedcaldav.config import config
from twistedcaldav.memcachelock import MemcacheLock, MemcacheLockTimeoutError
from twistedcaldav.method.report_common import applyToAddressBookCollections, applyToCalendarCollections
-from twistedcaldav.resource import isCalendarCollectionResource,\
+from twistedcaldav.resource import isCalendarCollectionResource, \
isPseudoCalendarCollectionResource, isAddressBookCollectionResource
from twistedcaldav.scheduling.implicit import ImplicitScheduler
log = Logger()
class DeleteResource(object):
-
+
def __init__(self, request, resource, resource_uri, parent, depth,
internal_request=False, allowImplicitSchedule=True):
-
+
self.request = request
self.resource = resource
self.resource_uri = resource_uri
@@ -58,7 +58,7 @@
"""
Check for If-ScheduleTag-Match header behavior.
"""
-
+
# Only when a direct request
if not self.internal_request:
header = self.request.headers.getHeader("If-Schedule-Tag-Match")
@@ -71,7 +71,7 @@
if not matched:
log.debug("If-Schedule-Tag-Match: header value '%s' does not match resource value '%s'" % (header, scheduletag,))
raise HTTPError(responsecode.PRECONDITION_FAILED)
-
+
elif config.Scheduling.CalDAV.ScheduleTagCompatibility:
# Actually by the time we get here the pre-condition will already have been tested and found to be OK
# (CalDAVFile.checkPreconditions) so we can ignore this case.
@@ -97,7 +97,7 @@
old_size = (yield delresource.quotaSize(self.request))
else:
old_size = 0
-
+
# Do delete
response = (yield delete(deluri, delresource.fp, self.depth))
@@ -128,7 +128,7 @@
# TODO: need to use transaction based delete on live scheduling object resources
# as the iTIP operation may fail and may need to prevent the delete from happening.
-
+
# Do If-Schedule-Tag-Match behavior first
self.validIfScheduleMatch()
@@ -138,7 +138,7 @@
old_size = (yield delresource.quotaSize(self.request))
else:
old_size = 0
-
+
scheduler = None
lock = None
if not self.internal_request and self.allowImplicitSchedule:
@@ -152,30 +152,30 @@
try:
if lock:
yield lock.acquire()
-
+
# Do delete
response = (yield delete(deluri, delresource.fp, self.depth))
# Adjust quota
if myquota is not None:
yield delresource.quotaSizeAdjust(self.request, -old_size)
-
+
if response == responsecode.NO_CONTENT:
newrevision = (yield parent.bumpSyncToken())
index = parent.index()
index.deleteResource(delresource.fp.basename(), newrevision)
-
+
# Do scheduling
if scheduler and not self.internal_request and self.allowImplicitSchedule:
yield scheduler.doImplicitScheduling()
except MemcacheLockTimeoutError:
raise HTTPError(StatusResponse(responsecode.CONFLICT, "Resource: %s currently in use on the server." % (deluri,)))
-
+
finally:
if lock:
yield lock.clean()
-
+
returnValue(response)
@inlineCallbacks
@@ -218,6 +218,7 @@
try:
yield self.deleteCalendarResource(child, childurl, delresource)
except:
+ log.err()
errors.add(childurl, responsecode.BAD_REQUEST)
# Now do normal delete
@@ -230,13 +231,13 @@
# Change CTag
yield delresource.bumpSyncToken()
more_responses = (yield self.deleteResource(delresource, deluri, parent))
-
+
if isinstance(more_responses, MultiStatusResponse):
# Merge errors
- errors.responses.update(more_responses.children)
+ errors.responses.update(more_responses.children)
response = errors.response()
-
+
if response == responsecode.NO_CONTENT:
# Do some clean up
yield delresource.deletedCalendar(self.request)
@@ -257,17 +258,17 @@
log.debug("Deleting collection %s" % (self.resource.fp.path,))
errors = ResponseQueue(self.resource_uri, "DELETE", responsecode.NO_CONTENT)
-
+
@inlineCallbacks
def doDeleteCalendar(delresource, deluri):
-
+
delparent = (yield delresource.locateParent(self.request, deluri))
response = (yield self.deleteCalendar(delresource, deluri, delparent))
if isinstance(response, MultiStatusResponse):
# Merge errors
- errors.responses.update(response.children)
+ errors.responses.update(response.children)
returnValue(True)
@@ -275,10 +276,10 @@
# Now do normal delete
more_responses = (yield self.deleteResource(self.resource, self.resource_uri, self.parent))
-
+
if isinstance(more_responses, MultiStatusResponse):
# Merge errors
- errors.responses.update(more_responses.children)
+ errors.responses.update(more_responses.children)
response = errors.response()
@@ -299,32 +300,32 @@
# TODO: need to use transaction based delete on live scheduling object resources
# as the iTIP operation may fail and may need to prevent the delete from happening.
-
+
# Do quota checks before we start deleting things
myquota = (yield delresource.quota(self.request))
if myquota is not None:
old_size = (yield delresource.quotaSize(self.request))
else:
old_size = 0
-
+
try:
-
+
# Do delete
response = (yield delete(deluri, delresource.fp, self.depth))
# Adjust quota
if myquota is not None:
yield delresource.quotaSizeAdjust(self.request, -old_size)
-
+
if response == responsecode.NO_CONTENT:
newrevision = (yield parent.bumpSyncToken())
index = parent.index()
- index.deleteResource(delresource.fp.basename(), newrevision)
-
+ index.deleteResource(delresource.fp.basename(), newrevision)
+
except MemcacheLockTimeoutError:
raise HTTPError(StatusResponse(responsecode.CONFLICT, "Resource: %s currently in use on the server." % (deluri,)))
-
-
+
+
returnValue(response)
@inlineCallbacks
@@ -373,13 +374,13 @@
yield delresource.bumpSyncToken()
more_responses = (yield self.deleteResource(delresource, deluri, parent))
-
+
if isinstance(more_responses, MultiStatusResponse):
# Merge errors
- errors.responses.update(more_responses.children)
+ errors.responses.update(more_responses.children)
response = errors.response()
-
+
returnValue(response)
@inlineCallbacks
@@ -397,17 +398,17 @@
log.debug("Deleting collection %s" % (self.resource.fp.path,))
errors = ResponseQueue(self.resource_uri, "DELETE", responsecode.NO_CONTENT)
-
+
@inlineCallbacks
def doDeleteAddressBook(delresource, deluri):
-
+
delparent = (yield delresource.locateParent(self.request, deluri))
response = (yield self.deleteAddressBook(delresource, deluri, delparent))
if isinstance(response, MultiStatusResponse):
# Merge errors
- errors.responses.update(response.children)
+ errors.responses.update(response.children)
returnValue(True)
@@ -415,10 +416,10 @@
# Now do normal delete
more_responses = (yield self.deleteResource(self.resource, self.resource_uri, self.parent))
-
+
if isinstance(more_responses, MultiStatusResponse):
# Merge errors
- errors.responses.update(more_responses.children)
+ errors.responses.update(more_responses.children)
response = errors.response()
@@ -429,7 +430,7 @@
if isCalendarCollectionResource(self.parent):
response = (yield self.deleteCalendarResource(self.resource, self.resource_uri, self.parent))
-
+
elif isCalendarCollectionResource(self.resource):
response = (yield self.deleteCalendar(self.resource, self.resource_uri, self.parent))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100604/ede608f9/attachment-0001.html>
More information about the calendarserver-changes
mailing list