Simply and generalize print group-members so that fields like the new status are automatically included as Google updates API

This commit is contained in:
Jay Lee
2016-08-31 14:23:58 -04:00
parent 7c21c670dc
commit dcae0155b2

View File

@ -9262,17 +9262,17 @@ def doPrintAliases():
continue continue
writeCSVfile(csvRows, titles, u'Aliases', todrive) writeCSVfile(csvRows, titles, u'Aliases', todrive)
MEMBERS_FIELD_NAMES = [u'group', u'id', u'email', u'role', u'type', u'name',]
def doPrintGroupMembers(): def doPrintGroupMembers():
cd = buildGAPIObject(u'directory') cd = buildGAPIObject(u'directory')
todrive = groupname = membernames = False todrive = False
membernames = False
customer = GC_Values[GC_CUSTOMER_ID] customer = GC_Values[GC_CUSTOMER_ID]
usedomain = usemember = None usedomain = None
fieldsList = [] usemember = None
titles = [] fields = None
titles = [u'group']
csvRows = [] csvRows = []
all_groups = [] groups_to_get = []
i = 3 i = 3
while i < len(sys.argv): while i < len(sys.argv):
if sys.argv[i].lower() == u'domain': if sys.argv[i].lower() == u'domain':
@ -9287,57 +9287,42 @@ def doPrintGroupMembers():
customer = None customer = None
i += 2 i += 2
elif sys.argv[i].lower() == u'fields': elif sys.argv[i].lower() == u'fields':
fieldNameList = sys.argv[i+1].lower() memberFieldsList = sys.argv[i+1].replace(u',', u' ').lower().split()
for field in fieldNameList.lower().replace(u',', u' ').split(): fields = u'nextPageToken,members(%s)' % (','.join(memberFieldsList))
if field in MEMBERS_FIELD_NAMES:
fieldsList.append(field)
titles.append(field)
else:
print u'ERROR: field name must be one of %s; got %s' % (u', '.join(MEMBERS_FIELD_NAMES), field)
sys.exit(2)
i += 2 i += 2
elif sys.argv[i].lower() == u'membernames': elif sys.argv[i].lower() == u'membernames':
membernames = True membernames = True
titles.append(u'name')
i += 1 i += 1
elif sys.argv[i].lower() == u'group': elif sys.argv[i].lower() == u'group':
group_email = sys.argv[i+1].lower() group_email = sys.argv[i+1].lower()
if group_email.find(u'@') == -1: if group_email.find(u'@') == -1:
group_email = u'%s@%s' % (group_email, GC_Values[GC_DOMAIN]) group_email = u'%s@%s' % (group_email, GC_Values[GC_DOMAIN])
all_groups = [{u'email': group_email}] groups_to_get = [{u'email': group_email}]
i += 2 i += 2
else: else:
print u'ERROR: %s is not a valid argument for "gam print group-members"' % sys.argv[i] print u'ERROR: %s is not a valid argument for "gam print group-members"' % sys.argv[i]
sys.exit(2) sys.exit(2)
if not fieldsList: if not groups_to_get:
for field in [u'id', u'role', u'group', u'email', u'type']: grous_to_get = callGAPIpages(cd.groups(), u'list', u'groups', message_attribute=u'email',
fieldsList.append(field)
titles.append(field)
if membernames:
titles.append(u'name')
else:
if u'name'in fieldsList:
membernames = True
fieldsList.remove(u'name')
if u'group' in fieldsList:
groupname = True
fieldsList.remove(u'group')
if not all_groups:
all_groups = callGAPIpages(cd.groups(), u'list', u'groups', message_attribute=u'email',
customer=customer, domain=usedomain, userKey=usemember, fields=u'nextPageToken,groups(email)') customer=customer, domain=usedomain, userKey=usemember, fields=u'nextPageToken,groups(email)')
i = 0 i = 0
count = len(all_groups) count = len(groups_to_get)
for group in all_groups: for group in groups_to_get:
i += 1 i += 1
group_email = group[u'email'] group_email = group[u'email']
sys.stderr.write(u'Getting members for %s (%s/%s)\n' % (group_email, i, count)) sys.stderr.write(u'Getting members for %s (%s/%s)\n' % (group_email, i, count))
group_members = callGAPIpages(cd.members(), u'list', u'members', message_attribute=u'email', groupKey=group_email) group_members = callGAPIpages(cd.members(), u'list', u'members',
message_attribute=u'email', groupKey=group_email, fields=fields)
for member in group_members: for member in group_members:
member_attr = {} for unwanted_item in [u'kind', u'etag']:
if groupname: if unwanted_item in member:
member_attr[u'group'] = group_email del(member[unwanted_item])
for title in fieldsList: for title in member:
member_attr[title] = member[title] if title not in titles:
if membernames: titles.append(title)
member[u'group'] = group_email
if membernames and u'type' in member and u'id' in member:
if member[u'type'] == u'USER': if member[u'type'] == u'USER':
try: try:
mbinfo = callGAPI(cd.users(), u'get', mbinfo = callGAPI(cd.users(), u'get',
@ -9356,8 +9341,8 @@ def doPrintGroupMembers():
memberName = u'Unknown' memberName = u'Unknown'
else: else:
memberName = u'Unknown' memberName = u'Unknown'
member_attr[u'name'] = memberName member[u'name'] = memberName
csvRows.append(member_attr) csvRows.append(member)
writeCSVfile(csvRows, titles, u'Group Members', todrive) writeCSVfile(csvRows, titles, u'Group Members', todrive)
def doPrintMobileDevices(): def doPrintMobileDevices():