[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