[CalendarServer-changes] [10657] CalendarServer/trunk/twext/who
source_changes at macosforge.org
source_changes at macosforge.org
Thu Feb 7 16:03:40 PST 2013
Revision: 10657
http://trac.calendarserver.org//changeset/10657
Author: wsanchez at apple.com
Date: 2013-02-07 16:03:40 -0800 (Thu, 07 Feb 2013)
Log Message:
-----------
Implement record.groups()
Modified Paths:
--------------
CalendarServer/trunk/twext/who/directory.py
CalendarServer/trunk/twext/who/idirectory.py
CalendarServer/trunk/twext/who/test/test_directory.py
CalendarServer/trunk/twext/who/test/test_xml.py
CalendarServer/trunk/twext/who/xml.py
Modified: CalendarServer/trunk/twext/who/directory.py
===================================================================
--- CalendarServer/trunk/twext/who/directory.py 2013-02-07 17:48:41 UTC (rev 10656)
+++ CalendarServer/trunk/twext/who/directory.py 2013-02-08 00:03:40 UTC (rev 10657)
@@ -112,16 +112,16 @@
try:
expression = expressionIterator.next()
except StopIteration:
- returnValue(set())
+ returnValue(())
results = (yield self.recordsFromExpression(expression))
for expression in expressions:
if (operand == Operand.AND and not results):
# No need to bother continuing here
- returnValue(set())
+ returnValue(())
- recordsMatchingExpression = (yield self.recordsFromExpression(expression))
+ recordsMatchingExpression = frozenset((yield self.recordsFromExpression(expression)))
if operand == Operand.AND:
results &= recordsMatchingExpression
@@ -229,8 +229,11 @@
raise NotImplementedError()
return succeed(())
+ def groups(self):
+ raise NotImplementedError()
+
def uniqueResult(values):
result = None
for value in values:
Modified: CalendarServer/trunk/twext/who/idirectory.py
===================================================================
--- CalendarServer/trunk/twext/who/idirectory.py 2013-02-07 17:48:41 UTC (rev 10656)
+++ CalendarServer/trunk/twext/who/idirectory.py 2013-02-08 00:03:40 UTC (rev 10657)
@@ -237,6 +237,28 @@
+class IMutableDirectoryService(IDirectoryService):
+ """
+ Mutable directory service.
+ """
+ def updateRecords(self, records, create=False):
+ """
+ Updates existing directory records.
+ @param records: the records to update
+ @type records: iterable of L{IDirectoryRecord}s
+ @param create: if true, create records if necessary
+ @type create: boolean
+ """
+
+ def removeRecords(self, uids):
+ """
+ Removes the records with the given UIDs.
+ @param uids: the UIDs of the records to remove
+ @type uids: iterable of L{bytes}
+ """
+
+
+
class IDirectoryRecord(Interface):
"""
Directory record.
@@ -250,6 +272,15 @@
"""
Find the records that are members of this group. Only direct
members are included; members of members are not expanded.
- @return: an iterable of L{IDirectoryRecord}s which are direct
- members of this group.
+ @return: a deferred iterable of L{IDirectoryRecord}s which are
+ direct members of this group.
"""
+
+ def groups():
+ """
+ Find the group records that this record is a member of. Only
+ groups for which this record is a direct member is are
+ included; membership is not expanded.
+ @return: a deferred iterable of L{IDirectoryRecord}s which are
+ groups that this record is a member of.
+ """
Modified: CalendarServer/trunk/twext/who/test/test_directory.py
===================================================================
--- CalendarServer/trunk/twext/who/test/test_directory.py 2013-02-07 17:48:41 UTC (rev 10656)
+++ CalendarServer/trunk/twext/who/test/test_directory.py 2013-02-08 00:03:40 UTC (rev 10657)
@@ -204,3 +204,17 @@
self.assertEquals(wsanchez.uid , wsanchez.fields[FieldName.uid ])
self.assertEquals(wsanchez.shortNames , wsanchez.fields[FieldName.shortNames ])
self.assertEquals(wsanchez.emailAddresses, wsanchez.fields[FieldName.emailAddresses])
+
+ @inlineCallbacks
+ def test_members(self):
+ wsanchez = self._testRecord(self.fields_wsanchez)
+
+ self.assertEquals(
+ set((yield wsanchez.members())),
+ set()
+ )
+
+ raise SkipTest("Subclasses should implement this test.")
+
+ def test_groups(self):
+ raise SkipTest("Subclasses should implement this test.")
Modified: CalendarServer/trunk/twext/who/test/test_xml.py
===================================================================
--- CalendarServer/trunk/twext/who/test/test_xml.py 2013-02-07 17:48:41 UTC (rev 10656)
+++ CalendarServer/trunk/twext/who/test/test_xml.py 2013-02-08 00:03:40 UTC (rev 10657)
@@ -103,6 +103,14 @@
<email>joe at example.com</email>
</record>
+ <record>
+ <uid>__alyssa__</uid>
+ <short-name>alyssa</short-name>
+ <full-name>Alyssa P. Hacker</full-name>
+ <password>assyla</password>
+ <email>alyssa at example.com</email>
+ </record>
+
<record type="group">
<uid>__calendar-dev__</uid>
<short-name>calendar-dev</short-name>
@@ -127,6 +135,15 @@
<member-uid>__dre__</member-uid>
</record>
+ <record type="group">
+ <uid>__developers__</uid>
+ <short-name>developers</short-name>
+ <full-name>All Developers</full-name>
+ <member-uid>__calendar-dev__</member-uid>
+ <member-uid>__twisted__</member-uid>
+ <member-uid>__alyssa__</member-uid>
+ </record>
+
</directory>
"""
@@ -146,6 +163,10 @@
@inlineCallbacks
def test_recordWithUID(self):
service = self._testService()
+
+ record = (yield service.recordWithUID("__null__"))
+ self.assertEquals(record, None)
+
record = (yield service.recordWithUID("__wsanchez__"))
self.assertEquals(record.uid, "__wsanchez__")
@@ -160,6 +181,9 @@
def test_recordsWithRecordType(self):
service = self._testService()
+ records = (yield service.recordsWithRecordType(object()))
+ self.assertEquals(set(records), set())
+
records = (yield service.recordsWithRecordType(RecordType.user))
self.assertEquals(
set((record.uid for record in records)),
@@ -171,6 +195,7 @@
"__dre__",
"__exarkun__",
"__dreid__",
+ "__alyssa__",
"__joe__",
)),
)
@@ -181,6 +206,7 @@
set((
"__calendar-dev__",
"__twisted__",
+ "__developers__",
))
)
@@ -189,6 +215,9 @@
def test_recordWithShortName(self):
service = self._testService()
+ #record = (yield service.recordWithShortName(RecordType.user, "null"))
+ #self.assertEquals(record, None)
+
record = (yield service.recordWithShortName(RecordType.user, "wsanchez"))
self.assertEquals(record.uid, "__wsanchez__")
@@ -243,14 +272,14 @@
def test_members(self):
service = self._testService()
- wsanchez = (yield service.recordWithUID("__wsanchez__"))
- members = (yield wsanchez.members())
+ record = (yield service.recordWithUID("__wsanchez__"))
+ members = (yield record.members())
self.assertEquals(set(members), set())
- wsanchez = (yield service.recordWithUID("__twisted__"))
- members = (yield wsanchez.members())
+ record = (yield service.recordWithUID("__twisted__"))
+ members = (yield record.members())
self.assertEquals(
- set(members),
+ set((member.uid for member in members)),
set((
"__wsanchez__",
"__glyph__",
@@ -259,3 +288,28 @@
"__dre__",
))
)
+
+ record = (yield service.recordWithUID("__developers__"))
+ members = (yield record.members())
+ self.assertEquals(
+ set((member.uid for member in members)),
+ set((
+ "__calendar-dev__",
+ "__twisted__",
+ "__alyssa__",
+ ))
+ )
+
+ @inlineCallbacks
+ def test_groups(self):
+ service = self._testService()
+
+ record = (yield service.recordWithUID("__wsanchez__"))
+ groups = (yield record.groups())
+ self.assertEquals(
+ set(group.uid for group in groups),
+ set((
+ "__calendar-dev__",
+ "__twisted__",
+ ))
+ )
Modified: CalendarServer/trunk/twext/who/xml.py
===================================================================
--- CalendarServer/trunk/twext/who/xml.py 2013-02-07 17:48:41 UTC (rev 10656)
+++ CalendarServer/trunk/twext/who/xml.py 2013-02-08 00:03:40 UTC (rev 10657)
@@ -134,6 +134,7 @@
BaseFieldName.guid,
BaseFieldName.shortNames,
BaseFieldName.emailAddresses,
+ FieldName.memberUIDs,
)
@@ -342,7 +343,10 @@
"""
@inlineCallbacks
def members(self):
- uids = set()
+ members = set()
for uid in getattr(self, "memberUIDs", ()):
- uids.add((yield self.service.recordWithUID(uid)).uid)
- returnValue(uids)
+ members.add((yield self.service.recordWithUID(uid)))
+ returnValue(members)
+
+ def groups(self):
+ return self.service.recordsWithFieldValue(FieldName.memberUIDs, self.uid)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130207/d7831191/attachment-0001.html>
More information about the calendarserver-changes
mailing list