Revision
12756
Author
sagen@apple.com
Date
2014-02-26 13:19:21 -0800 (Wed, 26 Feb 2014)

Log Message

Adds members() to opendirectory

Modified Paths

Diff

Modified: twext/trunk/twext/who/opendirectory/_constants.py (12755 => 12756)


--- twext/trunk/twext/who/opendirectory/_constants.py	2014-02-26 21:17:32 UTC (rev 12755)
+++ twext/trunk/twext/who/opendirectory/_constants.py	2014-02-26 21:19:21 UTC (rev 12756)
@@ -45,8 +45,15 @@
     metaRecordName.description = u"meta record name"
     metaRecordName.multiValue = False
 
+    memberUIDs = NamedConstant()
+    memberUIDs.description = u"member UIDs (excluding groups)"
+    memberUIDs.multiValue = True
 
+    nestedGroupsUIDs = NamedConstant()
+    nestedGroupsUIDs.description = u"nested group member UIDs"
+    nestedGroupsUIDs.multiValue = True
 
+
 #
 # OD constants
 #
@@ -159,6 +166,12 @@
     metaRecordName = ValueConstant(u"dsAttrTypeStandard:AppleMetaRecordName")
     metaRecordName.fieldName = FieldName.metaRecordName
 
+    groupMembers = ValueConstant(u"dsAttrTypeStandard:GroupMembers")
+    groupMembers.fieldName = FieldName.memberUIDs
+
+    nestedGroups = ValueConstant(u"dsAttrTypeStandard:NestedGroups")
+    nestedGroups.fieldName = FieldName.nestedGroupsUIDs
+
     # # Single value fields
     # AdminLimits = ValueConstant(u"dsAttrTypeStandard:AdminLimits")
     # AppleAliasData = ValueConstant(u"dsAttrTypeStandard:AppleAliasData")

Modified: twext/trunk/twext/who/opendirectory/_service.py (12755 => 12756)


--- twext/trunk/twext/who/opendirectory/_service.py	2014-02-26 21:17:32 UTC (rev 12755)
+++ twext/trunk/twext/who/opendirectory/_service.py	2014-02-26 21:19:21 UTC (rev 12756)
@@ -634,7 +634,7 @@
                 "GUID field is required.", fields
             )
 
-        fields[service.fieldName.uid] = unicode(guid)
+        fields[service.fieldName.uid] = unicode(guid).upper()
 
         super(DirectoryRecord, self).__init__(service, fields)
         self._odRecord = odRecord
@@ -720,6 +720,17 @@
 
 
 
+    @inlineCallbacks
+    def members(self):
+        members = set()
+        for uid in getattr(self, "memberUIDs", ()):
+            members.add((yield self.service.recordWithUID(uid)))
+        for uid in getattr(self, "nestedGroupsUIDs", ()):
+            members.add((yield self.service.recordWithUID(uid)))
+        returnValue(members)
+
+
+
 class NoQOPDigestCredentialFactory(DigestCredentialFactory):
     """
     DigestCredentialFactory without qop, to interop with OD.