[CalendarServer-changes] [9535] CalendarServer/branches/users/gaya/inviteclean/txdav/common/ datastore/sql.py

source_changes at macosforge.org source_changes at macosforge.org
Tue Aug 7 08:20:25 PDT 2012


Revision: 9535
          http://trac.macosforge.org/projects/calendarserver/changeset/9535
Author:   gaya at apple.com
Date:     2012-08-07 08:20:23 -0700 (Tue, 07 Aug 2012)
Log Message:
-----------
Remove all references to INVITE table

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py

Modified: CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py	2012-08-07 00:06:31 UTC (rev 9534)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py	2012-08-07 15:20:23 UTC (rev 9535)
@@ -56,7 +56,7 @@
 
 from txdav.common.datastore.sql_tables import schema
 from txdav.common.datastore.sql_tables import _BIND_MODE_OWN, \
-    _BIND_MODE_DIRECT, _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED, \
+    _BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED, \
     NOTIFICATION_OBJECT_REVISIONS_TABLE
 from txdav.common.icommondatastore import HomeChildNameNotAllowedError, \
     HomeChildNameAlreadyExistsError, NoSuchHomeChildError, \
@@ -1885,7 +1885,7 @@
     _objectTable         = None
 
 
-    def __init__(self, home, name, resourceID, mode, status=None, message=None, inviteUID=None):
+    def __init__(self, home, name, resourceID, mode, status=None, message=None):
 
         if home._notifiers:
             childID = "%s/%s" % (home.uid(), name)
@@ -1900,7 +1900,6 @@
         self._bindMode          = mode
         self._bindStatus        = status
         self._bindMessage       = message
-        self._inviteUID         = inviteUID
         self._created           = None
         self._modified          = None
         self._objects           = {}
@@ -1908,8 +1907,6 @@
         self._syncTokenRevision = None
         self._notifiers         = notifiers
         self._index             = None  # Derived classes need to set this
-        assert self._bindMode == _BIND_MODE_OWN or self._bindMode == _BIND_MODE_DIRECT or self._inviteUID is not None, \
-            "self._bindMode == _BIND_MODE_OWN or self._bindMode == _BIND_MODE_DIRECT or self._inviteUID is not None"
 
 
     @classproperty
@@ -1968,9 +1965,9 @@
 
 
     @classproperty
-    def _invitedChildListQuery(cls): #@NoSelf
+    def _invitedBindForHomeID(cls): #@NoSelf
         bind = cls._bindSchema
-        return cls._invitedBindFor((bind.HOME_RESOURCE_ID == Parameter("homeID"))
+        return cls._bindFor((bind.HOME_RESOURCE_ID == Parameter("homeID"))
                                     .And(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED))
 
     @classmethod
@@ -1981,8 +1978,7 @@
 
         @return: an iterable of C{str}s.
         """
-        #FIXME:  Not tested
-        rows = yield cls._invitedChildListQuery.on(
+        rows = yield cls._invitedBindForHomeID.on(
             home._txn, homeID=home._resourceID
         )
         names = [row[3] for row in rows]
@@ -2014,20 +2010,6 @@
                                   bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)))
 
 
-    @classproperty
-    def _inviteInsertQuery(cls): #@NoSelf
-        inv = schema.INVITE
-        return Insert(
-            {
-                inv.INVITE_UID: Parameter("uid"),
-                inv.NAME: Parameter("name"),
-                inv.HOME_RESOURCE_ID: Parameter("homeID"),
-                inv.RESOURCE_ID: Parameter("resourceID"),
-                inv.RECIPIENT_ADDRESS: Parameter("recipient")
-            }
-        )
-
-
     @classmethod
     def _updateBindColumnsQuery(cls, columnMap): #@NoSelf
         bind = cls._bindSchema
@@ -2083,20 +2065,12 @@
                 seenByOwner=True, seenBySharee=True,
                 bindStatus=status, message=message
             )
-            if mode != _BIND_MODE_DIRECT:
-                yield self._inviteInsertQuery.on(
-                    subt, uid=newName, name="unused",
-                    homeID=shareeHome._resourceID, resourceID=self._resourceID,
-                    recipient="unused"
-                )
             returnValue(newName)
         try:
             sharedName = yield self._txn.subtransaction(doInsert)
         except AllRetriesFailed:
             # FIXME: catch more specific exception
 
-            # Invite already exists; no need to update it, since the name will
-            # remain the same.        
             sharedName = (yield self._updateBindQuery.on(
                 self._txn,
                 mode=mode, status=status, message=message,
@@ -2217,16 +2191,6 @@
                 shareeChild._deletedSyncToken(sharedRemoval=True);
                 break;
 
-        # first delete the invite table row
-        inv = schema.INVITE
-        yield Delete(
-            From=inv,
-            Where=(inv.RESOURCE_ID == Parameter("resourceID"))
-                  .And(inv.HOME_RESOURCE_ID == Parameter("homeID")),
-        ).on(self._txn, resourceID=self._resourceID,
-             homeID=shareeHome._resourceID)
-        
-        #now delete the bind table row
         bind = self._bindSchema
         rows = yield Delete(
             From=bind,
@@ -2275,7 +2239,7 @@
         """
         @see: L{ICalendar.shareUID}
         """
-        return self._inviteUID
+        return self.name()
 
     @inlineCallbacks
     def unshare(self, homeType):
@@ -2298,50 +2262,29 @@
 
 
     @classmethod
-    def _invitedBindFor(cls, condition): #@NoSelf
+    def _bindFor(cls, condition): #@NoSelf
         bind = cls._bindSchema
-        inv = schema.INVITE
         return Select(
             [bind.BIND_MODE, 
              bind.HOME_RESOURCE_ID,
              bind.RESOURCE_ID,
              bind.RESOURCE_NAME,
              bind.BIND_STATUS,
-             bind.MESSAGE,
-             inv.INVITE_UID],
-                  From=inv.join(bind),
-                  Where=(condition
-                        .And(bind.BIND_MODE != _BIND_MODE_OWN)
-                        .And(inv.RESOURCE_ID == bind.RESOURCE_ID)
-                        .And(inv.HOME_RESOURCE_ID == bind.HOME_RESOURCE_ID)
-                        )
+             bind.MESSAGE],
+                  From=bind,
+                  Where=condition
         )
 
     @classproperty
-    def _sharedWithInviteFor(cls): #@NoSelf
+    def _acceptedBindForResourceID(cls): #@NoSelf
         bind = cls._bindSchema
-        return cls._invitedBindFor((bind.RESOURCE_ID == Parameter("resourceID"))
-                                    .And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
+        return cls._bindFor((bind.RESOURCE_ID == Parameter("resourceID"))
+                            .And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
+                            .And(bind.BIND_MODE != _BIND_MODE_OWN)
+                            )
     
 
-    @classproperty
-    def _acceptedBindFor(cls): #@NoSelf
-        bind = cls._bindSchema
-        return Select(
-            [bind.BIND_MODE, 
-             bind.HOME_RESOURCE_ID,
-             bind.RESOURCE_ID,
-             bind.RESOURCE_NAME,
-             bind.BIND_STATUS,
-             bind.MESSAGE],
-                  From=bind,
-                  Where=((bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
-                        .And(bind.RESOURCE_ID == Parameter("resourceID"))
-                        .And(bind.BIND_MODE != _BIND_MODE_OWN)
-                        )
-        )
 
-
     @inlineCallbacks
     def asShared(self):
         """
@@ -2354,21 +2297,12 @@
             L{CommonHomeChild} as a child of different L{CommonHome}s
         @rtype: a L{Deferred} which fires with a L{list} of L{ICalendar}s.
         """
-        # get all accepted binds, add inviteUID=None, and put in dict by homeResourceID
-        acceptedRows = yield self._acceptedBindFor.on(self._txn, resourceID=self._resourceID)
-        acceptedRowDict = dict([(row[1], row + [None,]) for row in acceptedRows])
-        
-        # get accepted binds with associated inviteUID, and put in dict by homeResourceID
-        #FIXME:  use simpler query on INVITE table only - perhaps OR of all resource IDs
-        inviteRows = yield self._sharedWithInviteFor.on(self._txn, resourceID=self._resourceID)
-        inviteRowDict = dict([(row[1], row) for row in inviteRows])
-        
-        # merge together homeResourceID, setting inviteUID if known
-        mergedRowDict = dict(acceptedRowDict, **inviteRowDict)
+        # get all accepted binds
+        acceptedRows = yield self._acceptedBindForResourceID.on(self._txn, resourceID=self._resourceID)
 
         cls = self.__class__ # for ease of grepping...
         result = []
-        for bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID in mergedRowDict.values(): #@UnusedVariable
+        for bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage in acceptedRows: #@UnusedVariable
             assert bindStatus == _BIND_STATUS_ACCEPTED
             # TODO: this could all be issued in parallel; no need to serialize
             # the loop.
@@ -2377,7 +2311,7 @@
                                                     homeResourceID)),
                 name=resourceName, resourceID=self._resourceID,
                 mode=bindMode, status=bindStatus, 
-                message=bindMessage, inviteUID=inviteUID,
+                message=bindMessage,
             )
             yield new.initFromStore()
             result.append(new)
@@ -2385,10 +2319,11 @@
 
 
     @classproperty
-    def _invitedFor(cls): #@NoSelf
+    def _invitedBindForResourceID(cls): #@NoSelf
         bind = cls._bindSchema
-        return cls._invitedBindFor((bind.RESOURCE_ID == Parameter("resourceID"))
-                                    .And(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED))
+        return cls._bindFor((bind.RESOURCE_ID == Parameter("resourceID"))
+                            .And(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED)
+                            )
 
     @inlineCallbacks
     def asInvited(self):
@@ -2402,13 +2337,13 @@
             L{CommonHomeChild} as a child of different L{CommonHome}s
         @rtype: a L{Deferred} which fires with a L{list} of L{ICalendar}s.
         """
-        rows = yield self._invitedFor.on(
+        rows = yield self._invitedBindForResourceID.on(
             self._txn, resourceID=self._resourceID
         )
         cls = self.__class__ # for ease of grepping...
 
         result = []
-        for bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID in rows: #@UnusedVariable
+        for bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage in rows: #@UnusedVariable
             # TODO: this could all be issued in parallel; no need to serialize
             # the loop.
             new = cls(
@@ -2416,7 +2351,7 @@
                                                     homeResourceID)),
                 name=resourceName, resourceID=self._resourceID,
                 mode=bindMode, status=bindStatus, 
-                message=bindMessage, inviteUID=inviteUID,
+                message=bindMessage,
             )
             yield new.initFromStore()
 
@@ -2424,11 +2359,6 @@
         returnValue(result)
 
 
-    @classproperty
-    def _allInvitedChildrenQuery(cls): #@NoSelf
-        bind = cls._bindSchema
-        return cls._invitedBindFor(bind.HOME_RESOURCE_ID == Parameter("homeID"))
-
     @classmethod
     @inlineCallbacks
     def loadAllObjects(cls, home):
@@ -2446,12 +2376,6 @@
 
         if dataRows:
             
-            # get inviteUID for indirect shared children and inviteUID (or None) into dataRows
-            #FIXME:  use simpler query on INVITE table only - perhaps OR of all resource IDs
-            invitedRows = yield cls._allInvitedChildrenQuery.on(home._txn, homeID=home._resourceID)
-            resouceIDToInviteUIDMap = dict([(invitedRow[2], invitedRow[6]) for invitedRow in invitedRows])
-            dataRows = [dataRow[:6] + [resouceIDToInviteUIDMap.get(dataRow[2]),] + dataRow[6:] for dataRow in dataRows]
-           
             # Get property stores for all these child resources (if any found)
             propertyStores = (yield PropertyStore.forMultipleResources(
                 home.uid(), home._txn,
@@ -2472,13 +2396,13 @@
 
         # Create the actual objects merging in properties
         for items in dataRows:
-            bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID = items[:7] #@UnusedVariable
+            bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage = items[:6] #@UnusedVariable
             metadata=items[7:]
             child = cls(
                 home=home,
                 name=resourceName, resourceID=resourceID,
                 mode=bindMode, status=bindStatus, 
-                message=bindMessage, inviteUID=inviteUID,
+                message=bindMessage,
             )
             for attr, value in zip(cls.metadataAttributes(), metadata):
                 setattr(child, attr, value)
@@ -2490,13 +2414,14 @@
 
 
     @classproperty
-    def _resourceIDInvitedByHomeByName(cls): #@NoSelf
+    def _invitedBindForNameAndHomeID(cls): #@NoSelf
         bind = cls._bindSchema
-        return cls._invitedBindFor((bind.RESOURCE_NAME == Parameter("objectName"))
-                                    .And(bind.HOME_RESOURCE_ID == Parameter("homeID"))
-                                    .And(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED))
-    
+        return cls._bindFor((bind.RESOURCE_NAME == Parameter("name"))
+                               .And(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+                               .And(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED)
+                               )
 
+
     @classmethod
     @inlineCallbacks
     def invitedObjectWithName(cls, home, name):
@@ -2512,47 +2437,30 @@
         @return: an L{CommonHomeChild} or C{None} if no such child
             exists.
         """
-        rows = yield cls._resourceIDInvitedByHomeByName.on(home._txn,
-                              objectName=name, homeID=home._resourceID)
+        rows = yield cls._invitedBindForNameAndHomeID.on(home._txn,
+                              name=name, homeID=home._resourceID)
 
         if not rows:
             returnValue(None)
 
-        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID = rows[0] #@UnusedVariable
+        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage = rows[0] #@UnusedVariable
         child = cls(
             home=home,
             name=resourceName, resourceID=resourceID,
             mode=bindMode, status=bindStatus, 
-            message=bindMessage, inviteUID=inviteUID,
+            message=bindMessage
         )
         yield child.initFromStore()
         returnValue(child)
 
 
     @classproperty
-    def _homeChildLookup(cls): #@NoSelf
+    def _bindForNameAndHomeID(cls): #@NoSelf
         bind = cls._bindSchema
-        return Select(
-            [bind.BIND_MODE, 
-             bind.HOME_RESOURCE_ID,
-             bind.RESOURCE_ID,
-             bind.RESOURCE_NAME,
-             bind.BIND_STATUS,
-             bind.MESSAGE],
-            From=bind,
-            Where=(bind.RESOURCE_NAME == Parameter('name')).And(
-                   bind.HOME_RESOURCE_ID == Parameter('homeID')).And(
-                        (bind.BIND_MODE == _BIND_MODE_OWN).Or(
-                        bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
-        )
+        return cls._bindFor((bind.RESOURCE_NAME == Parameter("name"))
+                               .And(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+                               )
 
-    @classproperty
-    def _sharedWithInviteAndNameFor(cls): #@NoSelf
-        bind = cls._bindSchema
-        return cls._invitedBindFor((bind.HOME_RESOURCE_ID == Parameter("homeID"))
-                                    .And(bind.RESOURCE_NAME == Parameter("name"))
-                                    .And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
-
     @classmethod
     @inlineCallbacks
     def objectWithName(cls, home, name):
@@ -2583,19 +2491,7 @@
 
         if rows is None:
             # No cached copy
-            # all owned or accepted binds w/o inviteUID
-            rows = yield cls._homeChildLookup.on(home._txn, name=name, homeID=home._resourceID)
-            if rows:
-                
-                #get invite id
-                inviteUID = None
-                if rows[0][0] != _BIND_MODE_OWN and rows[0][4] != _BIND_MODE_DIRECT:
-                    #FIXME:  use simpler query on INVITE table only - perhaps OR of all resource IDs
-                    inviteRows = yield cls._sharedWithInviteAndNameFor.on(home._txn, name=name, homeID=home._resourceID)
-                    if inviteRows:
-                        inviteUID = inviteRows[0][6]
-                        
-                rows[0].append(inviteUID) # add inviteUID column
+            rows = yield cls._bindForNameAndHomeID.on(home._txn, name=name, homeID=home._resourceID)
                     
             if rows and queryCacher and rows[0][0] == _BIND_MODE_OWN:
                 # Cache the result
@@ -2605,43 +2501,28 @@
             returnValue(None)
 
         
-        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID = rows[0] #@UnusedVariable
+        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage = rows[0] #@UnusedVariable
         child = cls(
             home=home,
             name=name, resourceID=resourceID,
             mode=bindMode, status=bindStatus, 
-            message=bindMessage, inviteUID=inviteUID,
+            message=bindMessage
         )
         yield child.initFromStore()
         returnValue(child)
 
 
     @classproperty
-    # FIXME: combine with _homeChildLookup()
-    def _homeChildByIDQuery(cls): #@NoSelf
+    def _bindForResourceIDAndHomeID(cls): #@NoSelf
         """
         DAL query that looks up home child names / bind modes by home child
         resource ID and home resource ID.
         """
         bind = cls._bindSchema
-        return Select([bind.BIND_MODE, 
-                       bind.HOME_RESOURCE_ID,
-                       bind.RESOURCE_ID,
-                       bind.RESOURCE_NAME,
-                       bind.BIND_STATUS,
-                       bind.MESSAGE],
-                      From=bind,
-                      Where=(bind.RESOURCE_ID == Parameter("resourceID")
-                            ).And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
+        return cls._bindFor((bind.RESOURCE_ID == Parameter("resourceID"))
+                               .And(bind.HOME_RESOURCE_ID == Parameter("homeID"))
+                               )
 
-
-    @classproperty
-    def _sharedWithInviteAndIDFor(cls): #@NoSelf
-        bind = cls._bindSchema
-        return cls._invitedBindFor((bind.HOME_RESOURCE_ID == Parameter("homeID"))
-                                    .And(bind.RESOURCE_ID == Parameter("resourceID"))
-                                    .And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
-
     @classmethod
     @inlineCallbacks
     def objectWithID(cls, home, resourceID):
@@ -2654,27 +2535,17 @@
         @return: an L{CommonHomeChild} or C{None} if no such child
             exists.
         """
-        rows = yield cls._homeChildByIDQuery.on(
+        rows = yield cls._bindForResourceIDAndHomeID.on(
             home._txn, resourceID=resourceID, homeID=home._resourceID)
         if not rows:
             returnValue(None)
-        
-        # get inviteUID
-        inviteUID = None
-        if rows[0][0] != _BIND_MODE_OWN and rows[0][4] != _BIND_MODE_DIRECT:
-            #FIXME:  use simpler query on INVITE table only
-            inviteRows = yield cls._sharedWithInviteAndIDFor.on(home._txn, resourceID=rows[0][2], homeID=home._resourceID)
-            if inviteRows:
-                inviteUID = inviteRows[0][6] if inviteRows else None
-        
-        rows[0].append([inviteUID,])
-        
-        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage, inviteUID = rows[0] #@UnusedVariable
+                
+        bindMode, homeResourceID, resourceID, resourceName, bindStatus, bindMessage = rows[0] #@UnusedVariable
         child = cls(
             home=home,
             name=resourceName, resourceID=resourceID,
             mode=bindMode, status=bindStatus, 
-            message=bindMessage, inviteUID=inviteUID,
+            message=bindMessage,
         )
         yield child.initFromStore()
         returnValue(child)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120807/fe10f1dd/attachment-0001.html>


More information about the calendarserver-changes mailing list