Revision
3564
Author
sagen@apple.com
Date
2008-12-22 10:41:33 -0800 (Mon, 22 Dec 2008)

Log Message

Adds expanded-group-membership property, and makes group-membership property non-expanding

Modified Paths

Diff

Modified: CalendarServer/trunk/run (3563 => 3564)


--- CalendarServer/trunk/run	2008-12-22 18:40:44 UTC (rev 3563)
+++ CalendarServer/trunk/run	2008-12-22 18:41:33 UTC (rev 3564)
@@ -692,7 +692,7 @@
 
 caldavtester="${top}/CalDAVTester";
 
-svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 3559;
+svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 3563;
 
 #
 # Calendar Server

Modified: CalendarServer/trunk/twistedcaldav/customxml.py (3563 => 3564)


--- CalendarServer/trunk/twistedcaldav/customxml.py	2008-12-22 18:40:44 UTC (rev 3563)
+++ CalendarServer/trunk/twistedcaldav/customxml.py	2008-12-22 18:41:33 UTC (rev 3564)
@@ -385,6 +385,17 @@
 
     allowed_children = { (dav_namespace, "href"): (0, None) }
 
+class ExpandedGroupMembership (davxml.WebDAVElement):
+    """
+    The expanded list of groups a principal is a member of
+    """
+    namespace = calendarserver_namespace
+    name = "expanded-group-membership"
+    protected = True
+    hidden = True
+
+    allowed_children = { (dav_namespace, "href"): (0, None) }
+
 class IScheduleInbox (davxml.WebDAVEmptyElement):
     """
     Denotes the resourcetype of a iSchedule Inbox.

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py (3563 => 3564)


--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-12-22 18:40:44 UTC (rev 3563)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2008-12-22 18:41:33 UTC (rev 3564)
@@ -630,13 +630,13 @@
         return succeed(self._getRelatives("members", infinity=True))
 
     @inlineCallbacks
-    def groupMemberships(self):
-        groups = self._getRelatives("groups", infinity=True)
+    def groupMemberships(self, infinity=False):
+        groups = self._getRelatives("groups", infinity=infinity)
 
         if config.EnableProxyPrincipals:
             # Get any directory specified proxies
-            groups.update(self._getRelatives("proxyFor", proxy='read-write', infinity=True))
-            groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=True))
+            groups.update(self._getRelatives("proxyFor", proxy='read-write', infinity=infinity))
+            groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=infinity))
 
             # Get proxy group UIDs and map to principal resources
             proxies = []
@@ -650,6 +650,10 @@
 
         returnValue(groups)
 
+    def expandedGroupMemberships(self):
+        return self.groupMemberships(infinity=True)
+
+
     @inlineCallbacks
     def proxyFor(self, read_write, resolve_memberships=True):
         proxyFors = set()

Modified: CalendarServer/trunk/twistedcaldav/resource.py (3563 => 3564)


--- CalendarServer/trunk/twistedcaldav/resource.py	2008-12-22 18:40:44 UTC (rev 3563)
+++ CalendarServer/trunk/twistedcaldav/resource.py	2008-12-22 18:41:33 UTC (rev 3564)
@@ -851,6 +851,7 @@
         (calendarserver_namespace, "calendar-proxy-read-for"  ),
         (calendarserver_namespace, "calendar-proxy-write-for" ),
         (calendarserver_namespace, "expanded-group-member-set"),
+        (calendarserver_namespace, "expanded-group-membership"),
     )
 
     @classmethod
@@ -946,7 +947,13 @@
                     *[davxml.HRef(p.principalURL()) for p in principals]
                 ))
 
+            elif name == "expanded-group-membership":
+                principals = (yield self.expandedGroupMemberships())
+                returnValue(customxml.ExpandedGroupMembership(
+                    *[davxml.HRef(p.principalURL()) for p in principals]
+                ))
 
+
         result = (yield super(CalendarPrincipalResource, self).readProperty(property, request))
         returnValue(result)