[CalendarServer-changes] [10044] CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/ datastore/sql.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Nov 16 12:29:07 PST 2012
Revision: 10044
http://trac.calendarserver.org//changeset/10044
Author: gaya at apple.com
Date: 2012-11-16 12:29:07 -0800 (Fri, 16 Nov 2012)
Log Message:
-----------
restore cleanup of AddressBookObject.remove() change + two database consistency asserts
Modified Paths:
--------------
CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-11-16 18:59:22 UTC (rev 10043)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-11-16 20:29:07 UTC (rev 10044)
@@ -378,46 +378,31 @@
if self._resourceID == self._addressbook._resourceID:
raise DeleteOfShadowGroupNotAllowedError
- aboForeignMembers = schema.ABO_FOREIGN_MEMBERS
+ ownerGroup, ownerAddressBook = yield self._ownerGroupAndAddressBook()
+
+ # delete members table row for this object
aboMembers = schema.ABO_MEMBERS
+ groupIDRows = yield Select(
+ [aboMembers.GROUP_ID],
+ From=aboMembers,
+ Where=aboMembers.MEMBER_ID == self._resourceID,
+ ).on(self._txn)
- ownerGroup, ownerAddressBook = yield self._ownerGroupAndAddressBook()
memberAddress = "urn:uuid:" + self._uid
- if ownerGroup:
- # convert a delete of a shared group member to a remove of that member in shared group and subgroups
- groupIDRows = yield Select(
- [aboMembers.GROUP_ID],
- From=aboMembers,
- Where=(aboMembers.MEMBER_ID == self._resourceID).And(
- aboMembers.GROUP_ID != ownerAddressBook._resourceID),
- ).on(self._txn)
-
- for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
+ for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
+ if ownerGroup and groupID == ownerAddressBook._resourceID:
+ pass # convert delete in shared group to remove of membership only part 1
+ else:
groupObject = yield ownerAddressBook.objectResourceWithID(groupID)
groupComponent = yield groupObject.component()
- if memberAddress in groupComponent.resourceMemberAddresses():
- groupComponent.removeProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberAddress))
- groupComponent.replaceProperty(Property("PRODID", vCardProductID))
- yield groupObject.updateDatabase(groupComponent)
+ assert memberAddress in groupComponent.resourceMemberAddresses(), "remove: member %s not in %s" % (self.component(), groupComponent)
+ groupComponent.removeProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberAddress))
+ #groupComponent.replaceProperty(Property("PRODID", vCardProductID))
+ yield groupObject.updateDatabase(groupComponent)
+ if ownerGroup:
+ pass # convert delete in shared group to remove of member only part 2
else:
- # delete members table rows for this object,...
- groupIDRows = yield Delete(
- aboMembers,
- Where=aboMembers.MEMBER_ID == self._resourceID,
- Return=aboMembers.GROUP_ID
- ).on(self._txn)
-
- # add to foreign member table row by UID
- for groupID in [groupIDRow[0] for groupIDRow in groupIDRows]:
- if groupID != self._ownerAddressBookResourceID:
- # add aboForeignMembers row to local groups only
- yield Insert(
- {aboForeignMembers.GROUP_ID: groupID,
- aboForeignMembers.ADDRESSBOOK_ID: self._ownerAddressBookResourceID,
- aboForeignMembers.MEMBER_ADDRESS: memberAddress, }
- ).on(self._txn)
-
yield super(AddressBookObject, self).remove()
self._kind = None
self._ownerAddressBookResourceID = None
@@ -675,7 +660,6 @@
# For shared groups: Non owner may NOT add group members not currently in group!
# (Or it would be possible to troll for unshared vCard UIDs and make them shared.)
-
if inserting or self._kind == _ABO_KIND_GROUP:
ownerGroup, ownerAddressBook = yield self._ownerGroupAndAddressBook()
@@ -727,10 +711,10 @@
memberAddress = "urn:uuid:" + self._uid
for group in groups:
groupComponent = yield group.component()
- if not memberAddress in groupComponent.resourceMemberAddresses():
- groupComponent.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberAddress))
- groupComponent.replaceProperty(Property("PRODID", vCardProductID))
- yield group.updateDatabase(groupComponent)
+ assert memberAddress not in groupComponent.resourceMemberAddresses(), "insert: member %s already in %s" % (component, groupComponent)
+ groupComponent.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberAddress))
+ #groupComponent.replaceProperty(Property("PRODID", vCardProductID))
+ yield group.updateDatabase(groupComponent)
# delete foreign members table row for this object
groupIDRows = yield Delete(
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121116/288c1b70/attachment.html>
More information about the calendarserver-changes
mailing list