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.