[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