[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