[CalendarServer-changes] [9542] CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing .py

source_changes at macosforge.org source_changes at macosforge.org
Tue Aug 7 22:22:54 PDT 2012


Revision: 9542
          http://trac.macosforge.org/projects/calendarserver/changeset/9542
Author:   gaya at apple.com
Date:     2012-08-07 22:22:54 -0700 (Tue, 07 Aug 2012)
Log Message:
-----------
in SharedHomeMixin, remove allShares()

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py

Modified: CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py	2012-08-08 05:19:21 UTC (rev 9541)
+++ CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py	2012-08-08 05:22:54 UTC (rev 9542)
@@ -1076,68 +1076,71 @@
 
     @inlineCallbacks
     def provisionShare(self, name):
-        # Try to find a matching share
-        child = None
-        shares = yield self.allShares()
-        if name in shares:
+        child = yield self._newStoreHome.childWithName(name)
+        share = yield self.shareWithChild(child)
+        if share:
             from twistedcaldav.sharedcollection import SharedCollectionResource
-            child = SharedCollectionResource(self, shares[name])
-            self.putChild(name, child)
-        returnValue(child)
+            sharedCollection = SharedCollectionResource(self, share)
+            self.putChild(name, sharedCollection)
+            returnValue(sharedCollection)
+        
+        returnValue(None)
 
 
     @inlineCallbacks
-    def allShares(self, refresh=False):
-                
-        if refresh or not hasattr(self, "_allShares"):
-            
-            shares = []
-            children = yield self._newStoreHome.children()
-            for shareeHomeChild in children:
-                if not shareeHomeChild.owned():
-                    
-                    sharerHomeID = yield shareeHomeChild.sharerHomeID()
-                    sharerHome = yield self._newStoreHome._txn.homeWithResourceID(self._newStoreHome._homeType, sharerHomeID)
-                    sharerHomeChild = yield sharerHome.childWithID(shareeHomeChild._resourceID)
-                    
-                    # get the shared object's URL
-                    principal = self.principalForUID(sharerHomeChild._home.uid())
-                    
-                    # FIXEME:  Fake up a request that can be used to get the sharer home resource
-                    class FakeRequest(object):pass
-                    fakeRequest = FakeRequest()
-                    setattr(fakeRequest, TRANSACTION_KEY, self._newStoreHome._txn)
-                    
-                    if self._newStoreHome._homeType == ECALENDARTYPE:
-                        sharerHomeCollection = yield principal.calendarHome(fakeRequest)
-                    elif self._newStoreHome._homeType == EADDRESSBOOKTYPE:
-                        sharerHomeCollection = yield principal.addressBookHome(fakeRequest)
-                    
-                    url = joinURL(sharerHomeCollection.url(), sharerHomeChild.name())
-                    
-                    
-                    share = Share(shareeHomeChild=shareeHomeChild, sharerHomeChild=sharerHomeChild, url=url)
-                    shares.append(share)
+    def shareWithChild(self, child, request=None):
+        # Try to find a matching share
+        if not child or child.owned():
+            returnValue(None)
+        
+        sharerHomeID = yield child.sharerHomeID()
+        sharerHome = yield self._newStoreHome._txn.homeWithResourceID(self._newStoreHome._homeType, sharerHomeID)
+        sharerHomeChild = yield sharerHome.childWithID(child._resourceID)
+        
+        # get the shared object's URL
+        sharer = self.principalForUID(sharerHomeChild._home.uid())
+        
+        if not request:
+            # FIXEME:  Fake up a request that can be used to get the sharer home resource
+            class FakeRequest(object):pass
+            fakeRequest = FakeRequest()
+            setattr(fakeRequest, TRANSACTION_KEY, self._newStoreHome._txn)
+            request = fakeRequest
+        
+        if self._newStoreHome._homeType == ECALENDARTYPE:
+            sharerHomeCollection = yield sharer.calendarHome(request)
+        elif self._newStoreHome._homeType == EADDRESSBOOKTYPE:
+            sharerHomeCollection = yield sharer.addressBookHome(request)
+        
+        url = joinURL(sharerHomeCollection.url(), sharerHomeChild.name())        
+        share = Share(shareeHomeChild=child, sharerHomeChild=sharerHomeChild, url=url)
 
-            self._allShares = dict([(share.name(), share) for share in shares])
-            
-        returnValue(self._allShares)
+        returnValue(share)
 
     @inlineCallbacks
-    def _shareForUID(self, shareUID, refresh=False):
+    def _shareForUID(self, shareUID, request):
         
-        allShares = yield self.allShares(refresh)
-        for share in allShares.values():
-            if share.uid() == shareUID:
+        # since child.shareUID() == child.name() for indirect shares
+        child = yield self._newStoreHome.childWithName(shareUID)
+        if child:
+            share = yield self.shareWithChild(child, request)
+            if share and share.uid() == shareUID:
                 returnValue(share)
+        
+        # find direct shares
+        children = yield self._newStoreHome.children()
+        for child in children:
+            share = yield self.shareWithChild(child, request)
+            if share and share.uid() == shareUID:
+                returnValue(share)
+                
         returnValue(None)
 
-
     @inlineCallbacks
     def acceptInviteShare(self, request, hostUrl, inviteUID, displayname=None):
         
         # Check for old share
-        oldShare = yield self._shareForUID(inviteUID)
+        oldShare = yield self._shareForUID(inviteUID, request)
 
         # Send the invite reply then add the link
         yield self._changeShare(request, "ACCEPTED", hostUrl, inviteUID, displayname)
@@ -1149,7 +1152,7 @@
     def acceptDirectShare(self, request, hostUrl, resourceUID, displayname=None):
 
         # Just add the link
-        oldShare = yield self._shareForUID(resourceUID)
+        oldShare = yield self._shareForUID(resourceUID, request)
         response = yield self._acceptShare(request, oldShare, True, hostUrl, resourceUID, displayname)
         returnValue(response)
 
@@ -1233,7 +1236,7 @@
     def removeShareByUID(self, request, shareUID):
         """ Remove a shared collection but do not send a decline back """
 
-        share = yield self._shareForUID(shareUID)
+        share = yield self._shareForUID(shareUID, request)
         if share:
             yield self.removeDirectShare(request, share)
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120807/92b11da9/attachment.html>


More information about the calendarserver-changes mailing list