[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