[CalendarServer-changes] [8046] CalendarServer/trunk/twistedcaldav/sharing.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Sep 2 11:44:56 PDT 2011
Revision: 8046
http://trac.macosforge.org/projects/calendarserver/changeset/8046
Author: cdaboo at apple.com
Date: 2011-09-02 11:44:56 -0700 (Fri, 02 Sep 2011)
Log Message:
-----------
Partial failures when removing invalid sharees now supported.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/sharing.py
Modified: CalendarServer/trunk/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/sharing.py 2011-09-02 18:39:37 UTC (rev 8045)
+++ CalendarServer/trunk/twistedcaldav/sharing.py 2011-09-02 18:44:56 UTC (rev 8046)
@@ -441,15 +441,8 @@
if type(cn) is not list:
cn = [cn]
- def _defer(resultset):
- results = [result if success else False for success, result in resultset]
- if resultIsList:
- return results
- else:
- return results[0]
-
dl = [self.inviteSingleUserToShare(user, cn, ace, summary, request) for user, cn in zip(userid, cn)]
- return DeferredList(dl).addCallback(_defer)
+ return self._processShareActionList(dl, resultIsList)
def uninviteUserToShare(self, userid, ace, request):
""" Send out in uninvite first, and then remove this user from the share list."""
@@ -459,10 +452,14 @@
# anything known to be invalid.
# TODO: Check if this collection is shared, and error out if it isn't
+ resultIsList = True
if type(userid) is not list:
userid = [userid]
- return DeferredList([self.uninviteSingleUserFromShare(user, ace, request) for user in userid]).addCallback(lambda _:True)
+ resultIsList = False
+ dl = [self.uninviteSingleUserFromShare(user, ace, request) for user in userid]
+ return self._processShareActionList(dl, resultIsList)
+
def inviteUserUpdateToShare(self, userid, cn, aceOLD, aceNEW, summary, request):
resultIsList = True
@@ -472,17 +469,15 @@
if type(cn) is not list:
cn = [cn]
+ dl = [self.inviteSingleUserUpdateToShare(user, cn, aceOLD, aceNEW, summary, request) for user, cn in zip(userid, cn)]
+ return self._processShareActionList(dl, resultIsList)
+
+ def _processShareActionList(self, dl, resultIsList):
def _defer(resultset):
results = [result if success else False for success, result in resultset]
- if resultIsList:
- return results
- else:
- return results[0]
-
- dl = [self.inviteSingleUserUpdateToShare(user, cn, aceOLD, aceNEW, summary, request) for user, cn in zip(userid, cn)]
+ return results if resultIsList else results[0]
return DeferredList(dl).addCallback(_defer)
-
-
+
@inlineCallbacks
def inviteSingleUserToShare(self, userid, cn, ace, summary, request):
@@ -519,7 +514,7 @@
if record:
result = (yield self.uninviteRecordFromShare(record, request))
else:
- result = True
+ result = False
returnValue(result)
@@ -701,6 +696,8 @@
# Only make changes if all OK
if len(badusers) == 0:
+ okusers = set()
+ badusers = set()
# Special case removing and adding the same user and treat that as an add
sameUseridInRemoveAndSet = [u for u in removeDict.keys() if u in setDict]
for u in sameUseridInRemoveAndSet:
@@ -719,6 +716,12 @@
result = (yield self.inviteUserUpdateToShare(userid, cn, removeACL, newACL, summary, request))
(okusers if result else badusers).add(userid)
+ # In this case bad items do not prevent ok items from being processed
+ ok_code = responsecode.OK
+ else:
+ # In this case a bad item causes all ok items not to be processed so failed dependency is returned
+ ok_code = responsecode.FAILED_DEPENDENCY
+
# Do a final validation of the entire set of invites
yield self.validateInvites()
@@ -726,7 +729,7 @@
if badusers:
xml_responses = []
xml_responses.extend([
- davxml.StatusResponse(davxml.HRef(userid), davxml.Status.fromResponseCode(responsecode.FAILED_DEPENDENCY))
+ davxml.StatusResponse(davxml.HRef(userid), davxml.Status.fromResponseCode(ok_code))
for userid in sorted(okusers)
])
xml_responses.extend([
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110902/2b91596c/attachment-0001.html>
More information about the calendarserver-changes
mailing list