[CalendarServer-changes] [11760] CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/ datastore

source_changes at macosforge.org source_changes at macosforge.org
Sat Sep 28 22:51:43 PDT 2013


Revision: 11760
          http://trac.calendarserver.org//changeset/11760
Author:   gaya at apple.com
Date:     2013-09-28 22:51:43 -0700 (Sat, 28 Sep 2013)
Log Message:
-----------
fix test, fix group remove, member remove

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py
    CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/test/test_sql.py

Modified: CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py	2013-09-28 04:04:39 UTC (rev 11759)
+++ CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/sql.py	2013-09-29 05:51:43 UTC (rev 11760)
@@ -585,7 +585,6 @@
         @type depth: C{str}
         """
 
-        print("sharedChildResourceNamesSinceRevision:%s revision:%s, depth:%s self._bindRevision=%s" % (self, revision, depth, self._bindRevision))
         assert not self.owned()
 
         bindRevisions = [self._bindRevision] if self.fullyShared() else []
@@ -600,7 +599,6 @@
             if depth == "1":
                 revision = 0
             else:
-                print("sharedChildResourceNamesSinceRevision:%s RAISE revision=%s < max([groupBindRow[5] for groupBindRow in groupBindRows]=%s)" % (self, revision, [groupBindRow[5] for groupBindRow in groupBindRows]))
                 # perhaps we could return a multistatus result of 403 instead: TODO: Check RFC
                 raise SyncTokenValidException
 
@@ -612,18 +610,11 @@
         deleted = set()
         acceptedGroupIDs = set([groupBindRow[2] for groupBindRow in groupBindRows])
 
-        print("sharedChildResourceNamesSinceRevision:%s acceptedGroupIDs:%s" % (self, acceptedGroupIDs))
-
         allowedObjectIDs = set((yield self.expandGroupIDs(self._txn, acceptedGroupIDs)))
         oldAllowedObjectIDs = set((yield self.expandGroupIDs(self._txn, acceptedGroupIDs, revision)))
         addedObjectIds = allowedObjectIDs - oldAllowedObjectIDs
         removedObjectIds = oldAllowedObjectIDs - allowedObjectIDs
 
-        print("sharedChildResourceNamesSinceRevision:%s oldAllowedObjectIDs=%s," % (self, oldAllowedObjectIDs,))
-        print("sharedChildResourceNamesSinceRevision:%s allowedObjectIDs=%s," % (self, allowedObjectIDs,))
-        print("sharedChildResourceNamesSinceRevision:%s addedObjectIds=%s," % (self, addedObjectIds,))
-        print("sharedChildResourceNamesSinceRevision:%s removedObjectIds=%s," % (self, removedObjectIds,))
-
         # get revision table changes
         rev = self._revisionsSchema
         results = [(
@@ -637,7 +628,6 @@
                             rev.RESOURCE_ID == self._resourceID)).on(self._txn)
             ) if name
         ]
-        print("sharedChildResourceNamesSinceRevision:%s results:%s" % (self, results))
 
         # id's are added on deletion
         idToNameMap = dict([(id, name) for name, id, wasdeleted in results if id != 0])
@@ -654,9 +644,6 @@
             )
             idToNameMap = dict(dict(idToNameMap), **dict(memberIDNameRows))
 
-        print("sharedChildResourceNamesSinceRevision:%s idToNameMap=%s" % (self, idToNameMap,))
-        #nameToIDMap = dict([(v, k) for k, v in idToNameMap.iteritems()])
-
         # for changes, get object names all at once here
         if revision:
             if depth == "1":
@@ -1618,14 +1605,14 @@
         aboMembers = schema.ABO_MEMBERS
         groupRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
             From=aboMembers,
-            Where=(aboMembers.MEMBER_ID == self._resourceID).And(aboMembers.REMOVED == False),
+            Where=aboMembers.MEMBER_ID == self._resourceID,
         ).on(self._txn)
 
         # combine by groupID
         groupIDToMemberRowMap = {}
-        for groupID, id, removed, version in groupRows:
+        for groupID, id, removed, revision in groupRows:
             memberRow = groupIDToMemberRowMap.get(groupID, [])
-            memberRow.append((id, version, removed,))
+            memberRow.append((id, removed, revision))
             groupIDToMemberRowMap[groupID] = memberRow
 
         # see if this object is in current version
@@ -2219,21 +2206,22 @@
             memberIDsToRemove = set(currentMemberIDs) - set(memberIDs)
             memberIDsToAdd = set(memberIDs) - set(currentMemberIDs)
 
-            for memberIDToAdd in memberIDsToAdd | memberIDsToRemove:
+            for memberID in memberIDsToAdd | memberIDsToRemove:
                 yield self._insertMemberIDQuery.on(
                     self._txn,
                     groupID=self._resourceID,
                     addressbookID=self._ownerAddressBookResourceID,
-                    memberID=memberIDToAdd,
+                    memberID=memberID,
                     revision=self._syncTokenRevision,
-                    removed=self._resourceID in memberIDsToRemove,
+                    removed=memberID in memberIDsToRemove,
                 )
 
             # get current foreign members
             currentForeignMemberRows = yield Select(
                 [aboForeignMembers.MEMBER_ADDRESS],
                  From=aboForeignMembers,
-                 Where=aboForeignMembers.GROUP_ID == self._resourceID,).on(self._txn)
+                 Where=aboForeignMembers.GROUP_ID == self._resourceID,
+            ).on(self._txn)
             currentForeignMemberAddrs = [currentForeignMemberRow[0] for currentForeignMemberRow in currentForeignMemberRows]
 
             foreignMemberAddrsToDelete = set(currentForeignMemberAddrs) - set(foreignMemberAddrs)

Modified: CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/test/test_sql.py	2013-09-28 04:04:39 UTC (rev 11759)
+++ CalendarServer/branches/users/gaya/sharedgroupfixes/txdav/carddav/datastore/test/test_sql.py	2013-09-29 05:51:43 UTC (rev 11760)
@@ -44,6 +44,7 @@
     schema, _BIND_MODE_DIRECT, _BIND_STATUS_ACCEPTED, _BIND_MODE_WRITE, \
     _BIND_STATUS_INVITED
 from txdav.common.datastore.test.util import buildStore
+from txdav.carddav.datastore.sql import AddressBook
 
 from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
 
@@ -597,6 +598,8 @@
             )
         subgroupObject = yield adbk.createAddressBookObjectWithName("sg.vcf", subgroup)
 
+        memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION], From=aboMembers).on(txn)
+        print("memberRows=%s" % (memberRows,))
         memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID], From=aboMembers, Where=aboMembers.REMOVED == False).on(txn)
         self.assertEqual(sorted(memberRows), sorted([
                                                      [groupObject._resourceID, subgroupObject._resourceID],
@@ -606,13 +609,29 @@
         foreignMemberRows = yield Select([aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers).on(txn)
         self.assertEqual(foreignMemberRows, [])
 
+        memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION], From=aboMembers).on(txn)
+        print("memberRows=%s" % (memberRows,))
         yield subgroupObject.remove()
-        memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID], From=aboMembers, Where=aboMembers.REMOVED == False).on(txn)
-        self.assertEqual(memberRows, [])
+        memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION], From=aboMembers).on(txn)
 
-        foreignMemberRows = yield Select([aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers,
-                                                 #Where=(aboForeignMembers.GROUP_ID == groupObject._resourceID),
-                                                 ).on(txn)
+                # combine by groupID
+        groupIDToMemberRowMap = {}
+        for groupID, id, removed, version in memberRows:
+            memberRow = groupIDToMemberRowMap.get(groupID, [])
+            memberRow.append((id, removed, version))
+            groupIDToMemberRowMap[groupID] = memberRow
+
+        # see if this object is in current version
+        groupIDs = set([
+            groupID for groupID, memberRows in groupIDToMemberRowMap.iteritems()
+                if AddressBook._currentMemberIDsFromMemberIDRemovedRevisionRows(memberRows)
+        ])
+
+        self.assertEqual(len(groupIDs), 0)
+
+        foreignMemberRows = yield Select(
+            [aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers,
+        ).on(txn)
         self.assertEqual(foreignMemberRows, [[groupObject._resourceID, "urn:uuid:uid3"]])
 
         yield home.removeAddressBookWithName("addressbook")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130928/d9bcf958/attachment.html>


More information about the calendarserver-changes mailing list