[CalendarServer-changes] [2493] CalendarServer/trunk/twistedcaldav/method/report_multiget.py
source_changes at macosforge.org
source_changes at macosforge.org
Sat May 24 20:56:18 PDT 2008
Revision: 2493
http://trac.macosforge.org/projects/calendarserver/changeset/2493
Author: wsanchez at apple.com
Date: 2008-05-24 20:56:18 -0700 (Sat, 24 May 2008)
Log Message:
-----------
Ixnay on the eferredGeneratorsday
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/method/report_multiget.py
Modified: CalendarServer/trunk/twistedcaldav/method/report_multiget.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_multiget.py 2008-05-25 03:34:43 UTC (rev 2492)
+++ CalendarServer/trunk/twistedcaldav/method/report_multiget.py 2008-05-25 03:56:18 UTC (rev 2493)
@@ -22,7 +22,7 @@
from urllib import unquote
-from twisted.internet.defer import deferredGenerator, waitForDeferred
+from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.web2 import responsecode
from twisted.web2.dav import davxml
from twisted.web2.dav.element.base import dav_namespace
@@ -39,6 +39,7 @@
max_number_of_multigets = 5000
+ at inlineCallbacks
def report_urn_ietf_params_xml_ns_caldav_calendar_multiget(self, request, multiget):
"""
Generate a multiget REPORT.
@@ -51,9 +52,7 @@
# Make sure target resource is of the right type
if not self.isCollection():
- parent = waitForDeferred(self.locateParent(request, request.uri))
- yield parent
- parent = parent.getResult()
+ parent = yield self.locateParent(request, request.uri)
if not parent.isPseudoCalendarCollection():
log.err("calendar-multiget report is not allowed on a resource outside of a calendar collection %s" % (self,))
raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Must be calendar resource"))
@@ -106,18 +105,14 @@
# Do some optimisation of access control calculation by determining any inherited ACLs outside of
# the child resource loop and supply those to the checkPrivileges on each child.
- filteredaces = waitForDeferred(self.inheritedACEsforChildren(request))
- yield filteredaces
- filteredaces = filteredaces.getResult()
+ filteredaces = yield self.inheritedACEsforChildren(request)
# Check for disabled access
if filteredaces is None:
disabled = True
# Check private events access status
- d = waitForDeferred(self.isOwner(request))
- yield d
- isowner = d.getResult()
+ isowner = yield self.isOwner(request)
elif self.isCollection():
requestURIis = "collection"
@@ -130,7 +125,8 @@
isowner = None
if not disabled:
-
+
+ @inlineCallbacks
def doCalendarResponse():
# Verify that requested resources are immediate children of the request-URI
valid_names = []
@@ -142,8 +138,7 @@
else:
valid_names.append(name)
if not valid_names:
- yield None
- return
+ returnValue(None)
# Verify that valid requested resources are calendar objects
exists_names = tuple(self.index().resourcesExist(valid_names))
@@ -155,13 +150,12 @@
else:
checked_names.append(name)
if not checked_names:
- yield None
- return
+ returnValue(None)
# Now determine which valid resources are readable and which are not
ok_resources = []
bad_resources = []
- d = self.findChildrenFaster(
+ yield self.findChildrenFaster(
"1",
request,
lambda x, y: ok_resources.append((x, y)),
@@ -170,26 +164,17 @@
(davxml.Read(),),
inherited_aces=filteredaces
)
- x = waitForDeferred(d)
- yield x
- x.getResult()
# Get properties for all valid readable resources
for resource, href in ok_resources:
- d = waitForDeferred(report_common.responseForHref(request, responses, davxml.HRef.fromString(href), resource, None, propertiesForResource, propertyreq, isowner=isowner))
- yield d
- d.getResult()
+ yield report_common.responseForHref(request, responses, davxml.HRef.fromString(href), resource, None, propertiesForResource, propertyreq, isowner=isowner)
# Indicate error for all valid non-readable resources
for ignore_resource, href in bad_resources:
responses.append(davxml.StatusResponse(davxml.HRef.fromString(href), davxml.Status.fromResponseCode(responsecode.FORBIDDEN)))
- doCalendarResponse = deferredGenerator(doCalendarResponse)
-
if requestURIis == "calendar":
- d = waitForDeferred(doCalendarResponse())
- yield d
- d.getResult()
+ yield doCalendarResponse()
else:
for href in resources:
@@ -206,17 +191,13 @@
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.NOT_FOUND)))
continue
- child = waitForDeferred(request.locateResource(resource_uri))
- yield child
- child = child.getResult()
+ child = yield request.locateResource(resource_uri)
if not child or not child.exists():
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.NOT_FOUND)))
continue
- parent = waitForDeferred(child.locateParent(request, resource_uri))
- yield parent
- parent = parent.getResult()
+ parent = yield child.locateParent(request, resource_uri)
if not parent.isCalendarCollection() or not parent.index().resourceExists(name):
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.FORBIDDEN)))
@@ -224,9 +205,7 @@
# Check privileges on parent - must have at least DAV:read
try:
- d = waitForDeferred(parent.checkPrivileges(request, (davxml.Read(),)))
- yield d
- d.getResult()
+ yield parent.checkPrivileges(request, (davxml.Read(),))
except AccessDeniedError:
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.FORBIDDEN)))
continue
@@ -237,23 +216,17 @@
# Do some optimisation of access control calculation by determining any inherited ACLs outside of
# the child resource loop and supply those to the checkPrivileges on each child.
- filteredaces = waitForDeferred(parent.inheritedACEsforChildren(request))
- yield filteredaces
- filteredaces = filteredaces.getResult()
+ filteredaces = yield parent.inheritedACEsforChildren(request)
# Check private events access status
- d = waitForDeferred(parent.isOwner(request))
- yield d
- isowner = d.getResult()
+ isowner = yield parent.isOwner(request)
else:
name = unquote(resource_uri[resource_uri.rfind("/") + 1:])
if (resource_uri != request.uri) or not self.exists():
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.NOT_FOUND)))
continue
- parent = waitForDeferred(self.locateParent(request, resource_uri))
- yield parent
- parent = parent.getResult()
+ parent = yield self.locateParent(request, resource_uri)
if not parent.isPseudoCalendarCollection() or not parent.index().resourceExists(name):
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.FORBIDDEN)))
@@ -262,28 +235,18 @@
# Do some optimisation of access control calculation by determining any inherited ACLs outside of
# the child resource loop and supply those to the checkPrivileges on each child.
- filteredaces = waitForDeferred(parent.inheritedACEsforChildren(request))
- yield filteredaces
- filteredaces = filteredaces.getResult()
+ filteredaces = yield parent.inheritedACEsforChildren(request)
# Check private events access status
- d = waitForDeferred(parent.isOwner(request))
- yield d
- isowner = d.getResult()
+ isowner = yield parent.isOwner(request)
# Check privileges - must have at least DAV:read
try:
- d = waitForDeferred(child.checkPrivileges(request, (davxml.Read(),), inherited_aces=filteredaces))
- yield d
- d.getResult()
+ yield child.checkPrivileges(request, (davxml.Read(),), inherited_aces=filteredaces)
except AccessDeniedError:
responses.append(davxml.StatusResponse(href, davxml.Status.fromResponseCode(responsecode.FORBIDDEN)))
continue
- d = waitForDeferred(report_common.responseForHref(request, responses, href, child, None, propertiesForResource, propertyreq, isowner=isowner))
- yield d
- d.getResult()
+ yield report_common.responseForHref(request, responses, href, child, None, propertiesForResource, propertyreq, isowner=isowner)
- yield MultiStatusResponse(responses)
-
-report_urn_ietf_params_xml_ns_caldav_calendar_multiget = deferredGenerator(report_urn_ietf_params_xml_ns_caldav_calendar_multiget)
+ returnValue(MultiStatusResponse(responses))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080524/9edb0b39/attachment.htm
More information about the calendarserver-changes
mailing list