[CalendarServer-changes] [434] CalendarServer/branches/users/wsanchez/provisioning/twistedcaldav/ directory/resource.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Nov 10 16:57:53 PST 2006


Revision: 434
          http://trac.macosforge.org/projects/calendarserver/changeset/434
Author:   wsanchez at apple.com
Date:     2006-11-10 16:57:53 -0800 (Fri, 10 Nov 2006)

Log Message:
-----------
Use common implementation for groupMembers() and groupMemberships().

Modified Paths:
--------------
    CalendarServer/branches/users/wsanchez/provisioning/twistedcaldav/directory/resource.py

Modified: CalendarServer/branches/users/wsanchez/provisioning/twistedcaldav/directory/resource.py
===================================================================
--- CalendarServer/branches/users/wsanchez/provisioning/twistedcaldav/directory/resource.py	2006-11-10 23:29:13 UTC (rev 433)
+++ CalendarServer/branches/users/wsanchez/provisioning/twistedcaldav/directory/resource.py	2006-11-11 00:57:53 UTC (rev 434)
@@ -86,9 +86,9 @@
         # This avoids finding case variants of put children on case-insensitive filesystems.
         if name not in self.putChildren and name.lower() in (x.lower() for x in self.putChildren):
             return None
+        else:
+            return self.putChildren.get(name, None)
 
-        return super(DirectoryPrincipalProvisioningResource, self).getChild(name)
-
     def listChildren(self):
         self._initChildren()
         return self.putChildren.keys()
@@ -214,15 +214,32 @@
         # FIXME: Add API to IDirectoryRecord for getting a record URI?
         return ()
 
+    def _getRelatives(self, method, record=None, relatives=None, records=None):
+        if record is None:
+            record = self.record
+        if relatives is None:
+            relatives = set()
+        if records is None:
+            records = set()
+
+        if record not in records:
+            records.add(record)
+            myRecordType = self.record.recordType
+            for relative in getattr(record, method)():
+                if relative not in records:
+                    if relative.recordType == myRecordType: 
+                        relatives.add(self._parent.getChild(None, record=relative))
+                    else:
+                        relatives.add(self._parent._parent.getChild(relative.recordType).getChild(None, record=relative))
+                    self._getRelatives(method, relative, relatives, records)
+
+        return relatives
+
     def groupMembers(self):
-        for member in self.record.members():
-            if member.recordType == self.record.recordType: 
-                yield self._parent.getChild(None, record=member)
-            else:
-                yield self._parent._parent.getChild(member.recordType).getChild(None, record)
+        return self._getRelatives("members")
 
     def groupMemberships(self):
-        raise NotImplementedError("DirectoryPrincipalResource.groupMemberships()")
+        return self._getRelatives("groups")
 
     def principalCollections(self, request):
         return self._parent.principalCollections(request)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20061110/789f11b8/attachment.html


More information about the calendarserver-changes mailing list