[CalendarServer-changes] [11905] CalendarServer/branches/users/sagen/groupcacher

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 12 11:20:26 PDT 2014


Revision: 11905
          http://trac.calendarserver.org//changeset/11905
Author:   sagen at apple.com
Date:     2013-11-07 11:38:49 -0800 (Thu, 07 Nov 2013)
Log Message:
-----------
More cleanup and docstrings

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py
    CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py
    CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py

Modified: CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py	2013-11-07 19:20:46 UTC (rev 11904)
+++ CalendarServer/branches/users/sagen/groupcacher/twext/who/groups.py	2013-11-07 19:38:49 UTC (rev 11905)
@@ -194,12 +194,6 @@
 
         yield txn.updateGroup(groupGUID, record.fullNames[0], membershipHash)
 
-        results = (yield txn.groupByGUID(groupGUID))
-        if len(results) == 1:
-            groupID, name, cachedMembershipHash = results[0]
-        else:
-            self.log.error("Multiple group entries for {guid}", guid=groupGUID)
-
         if membershipChanged:
             newMemberGUIDs = set()
             for member in members:
@@ -212,10 +206,7 @@
     @inlineCallbacks
     def synchronizeMembers(self, txn, groupID, newMemberGUIDs):
         numRemoved = numAdded = 0
-        cachedMemberGUIDs = set()
-        results = (yield txn.membersOfGroup(groupID))
-        for row in results:
-            cachedMemberGUIDs.add(row[0])
+        cachedMemberGUIDs = (yield txn.membersOfGroup(groupID))
 
         for memberGUID in cachedMemberGUIDs:
             if memberGUID not in newMemberGUIDs:
@@ -233,9 +224,9 @@
     @inlineCallbacks
     def cachedMembers(self, txn, groupID):
         members = set()
-        results = (yield txn.membersOfGroup(groupID))
-        for row in results:
-            record = (yield self.directory.recordWithGUID(row[0]))
+        memberGUIDs = (yield txn.membersOfGroup(groupID))
+        for guid in memberGUIDs:
+            record = (yield self.directory.recordWithGUID(guid))
             if record is not None:
                 members.add(record)
         returnValue(members)

Modified: CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py	2013-11-07 19:20:46 UTC (rev 11904)
+++ CalendarServer/branches/users/sagen/groupcacher/twext/who/test/test_groups.py	2013-11-07 19:38:49 UTC (rev 11905)
@@ -41,6 +41,11 @@
 
     @inlineCallbacks
     def test_expandedMembers(self):
+        """
+        Verify _expandedMembers() returns a "flattened" set of records
+        belonging to a group (and does not return sub-groups themselves,
+        only their members)
+        """
         record = yield self.xmlService.recordWithUID("__top_group_1__")
         memberUIDs = set()
         for member in (yield _expandedMembers(record)):
@@ -48,6 +53,7 @@
         self.assertEquals(memberUIDs, set(["__cdaboo__",
             "__glyph__", "__sagen__", "__wsanchez__"]))
 
+        # Non group records return an empty set() of members
         record = yield self.xmlService.recordWithUID("__sagen__")
         members = yield _expandedMembers(record)
         self.assertEquals(0, len(list(members)))
@@ -63,24 +69,24 @@
         store = self.storeUnderTest()
         txn = store.newTransaction()
 
-        guid = "49b350c69611477b94d95516b13856ab"
-        yield self.groupCacher.refreshGroup(txn, guid)
+        record = yield self.xmlService.recordWithUID("__top_group_1__")
+        yield self.groupCacher.refreshGroup(txn, record.guid)
 
-        groupID, name, membershipHash = (yield txn.groupByGUID(guid))
+        groupID, name, membershipHash = (yield txn.groupByGUID(record.guid))
         self.assertEquals(membershipHash, "e90052eb63d47f32d5b03df0073f7854")
 
         groupGUID, name, membershipHash = (yield txn.groupByID(groupID))
-        self.assertEquals(groupGUID, guid)
+        self.assertEquals(groupGUID, record.guid)
         self.assertEquals(name, "Top Group 1")
         self.assertEquals(membershipHash, "e90052eb63d47f32d5b03df0073f7854")
 
-        results = (yield txn.membersOfGroup(groupID))
+        members = (yield txn.membersOfGroup(groupID))
         self.assertEquals(
             set(["9064df911dbc4e079c2b6839b0953876",
                  "4ad155cbae9b475f986ce08a7537893e",
                  "3bdcb95484d54f6d8035eac19a6d6e1f",
                  "7d45cb10479e456bb54d528958c5734b"]),
-            set([r[0] for r in results])
+            members
         )
 
         records = (yield self.groupCacher.cachedMembers(txn, groupID))

Modified: CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py	2013-11-07 19:20:46 UTC (rev 11904)
+++ CalendarServer/branches/users/sagen/groupcacher/txdav/common/datastore/sql.py	2013-11-07 19:38:49 UTC (rev 11905)
@@ -1001,9 +1001,24 @@
         return self._removeMemberFromGroupQuery.on(self,
             groupID=groupID, memberGUID=memberGUID)
 
+    @inlineCallbacks
     def membersOfGroup(self, groupID):
-        return self._selectGroupMembersQuery.on(self, groupID=groupID)
+        """
+        Returns the cached set of GUIDs for members of the given groupID.
+        Sub-groups are not returned in the results but their members are.
 
+        @param groupID: the group ID
+        @type groupID: C{int}
+        @return: the set of member GUIDs
+        @rtype: a Deferred which fires with a set() of C{str} GUIDs
+        """
+        members = set()
+        results = (yield self._selectGroupMembersQuery.on(self,
+            groupID=groupID))
+        for row in results:
+            members.add(row[0])
+        returnValue(members)
+
     # End of Group Members
 
     # Delegates
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/6b9826f8/attachment.html>


More information about the calendarserver-changes mailing list