[CalendarServer-changes] [5370] CalendarServer/trunk/twext/web2/dav/resource.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 19 20:57:56 PDT 2010


Revision: 5370
          http://trac.macosforge.org/projects/calendarserver/changeset/5370
Author:   wsanchez at apple.com
Date:     2010-03-19 20:57:55 -0700 (Fri, 19 Mar 2010)
Log Message:
-----------
deferredGenerator -> inlineCallbacks and unroll defGens

Modified Paths:
--------------
    CalendarServer/trunk/twext/web2/dav/resource.py

Modified: CalendarServer/trunk/twext/web2/dav/resource.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/resource.py	2010-03-20 03:34:24 UTC (rev 5369)
+++ CalendarServer/trunk/twext/web2/dav/resource.py	2010-03-20 03:57:55 UTC (rev 5370)
@@ -2014,28 +2014,20 @@
         
         # Check this one first
         if self.hasQuotaRoot(request):
-            yield True
-            return
+            return succeed(True)
         
         # Look at each parent
         try:
             url = request.urlForResource(self)
             if url != "/":
-                parent = waitForDeferred(
-                    request.locateResource(parentForURL(url))
-                )
-                yield parent
-                parent = parent.getResult()
-                d = waitForDeferred(parent.hasQuota(request))
-                yield d
-                yield d.getResult()
+                d = request.locateResource(parentForURL(url))
+                d.addCallback(lambda p: p.hasQuota(request))
+                return d
             else:
-                yield False
+                return succeed(False)
         except NoURLForResourceError:
-            yield False
-    
-    hasQuota = deferredGenerator(hasQuota)
-        
+            return succeed(False)
+
     def hasQuotaRoot(self, request):
         """
         @return: a C{True} if this resource has quota root, C{False} otherwise.
@@ -2053,6 +2045,7 @@
         else:
             return None
     
+    @inlineCallbacks
     def quotaRootParent(self, request):
         """
         Return the next quota root above this resource.
@@ -2064,16 +2057,11 @@
         url = request.urlForResource(self)
         while (url != "/"):
             url = parentForURL(url)
-            parent = waitForDeferred(request.locateResource(url))
-            yield parent
-            parent = parent.getResult()
+            parent = (yield request.locateResource(url))
             if parent.hasQuotaRoot(request):
-                yield parent
-                return
+                returnValue(parent)
 
-        yield None
-    
-    quotaRootParent = deferredGenerator(quotaRootParent)
+        returnValue(None)
         
     def setQuotaRoot(self, request, maxsize):
         """
@@ -2103,6 +2091,7 @@
         """
         unimplemented(self)
 
+    @inlineCallbacks
     def checkQuota(self, request, available):
         """
         Check to see whether all quota roots have sufficient available
@@ -2122,18 +2111,13 @@
             quota = quotaroot.quotaRoot(request)
             if quota is not None:
                 if available > quota[0]:
-                    yield False
-                    return
+                    returnValue(False)
 
             # Check the next parent with a quota root
-            quotaroot = waitForDeferred(quotaroot.quotaRootParent(request))
-            yield quotaroot
-            quotaroot = quotaroot.getResult()
+            quotaroot = (yield quotaroot.quotaRootParent(request))
 
-        yield True
+        returnValue(True)
 
-    checkQuota = deferredGenerator(checkQuota)
-
     def quotaSizeAdjust(self, request, adjust):
         """
         Update the quota used value on all quota root parents of this
@@ -2147,26 +2131,20 @@
         # Check this resource first
         if self.isCollection():
             if self.hasQuotaRoot(request):
-                d = waitForDeferred(self.updateQuotaUse(request, adjust))
-                yield d
-                d.getResult()
-                yield None
-                return
+                d = self.updateQuotaUse(request, adjust)
+                d.addCallback(lambda _: None) # FIXME: do we need this?
+                return d
         
         # Check the next parent
         url = request.urlForResource(self)
         if url != "/":
-            parent = waitForDeferred(request.locateResource(parentForURL(url)))
-            yield parent
-            parent = parent.getResult()
-            d = waitForDeferred(parent.quotaSizeAdjust(request, adjust))
-            yield d
-            d.getResult()
+            d = request.locateResource(parentForURL(url))
+            d.addCallback(lambda p: p.quotaSizeAdjust(request, adjust))
+            d.addCallback(lambda _: None) # FIXME: do we need this?
+            return d
 
-        yield None
+        return succeed(None)
 
-    quotaSizeAdjust = deferredGenerator(quotaSizeAdjust)
-
     def currentQuotaUse(self, request):
         """
         Get the cached quota use value, or if not present (or invalid)
@@ -2424,7 +2402,6 @@
         """
         unimplemented(self)
 
-    @deferredGenerator
     def principalMatch(self, href):
         """
         Check whether the supplied principal matches this principal or
@@ -2434,14 +2411,14 @@
         """
         uri = str(href)
         if self.principalURL() == uri:
-            yield True
-            return
+            return succeed(True)
         else:
-            d = waitForDeferred(self.expandedGroupMembers())
-            yield d
-            members = d.getResult()
-            member_uris = [member.principalURL() for member in members]
-            yield uri in member_uris
+            d = self.expandedGroupMembers()
+            d.addCallback(
+                lambda members:
+                    uri in [member.principalURL() for member in members]
+            )
+            return d
 
 
 class DAVPrincipalCollectionResource (DAVResource):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100319/ea529df4/attachment-0001.html>


More information about the calendarserver-changes mailing list