mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-03 20:31:35 +00:00
Added count and allfields arguments to gam print groups (#373)
This commit is contained in:
@@ -585,8 +585,8 @@ gam info group <GroupItem> [nousers] [noaliases] [groups]
|
|||||||
gam update group <GroupItem> clear [member] [manager] [owner]
|
gam update group <GroupItem> clear [member] [manager] [owner]
|
||||||
|
|
||||||
gam print groups [todrive] ([domain <DomainName>] [member <UserItem>])
|
gam print groups [todrive] ([domain <DomainName>] [member <UserItem>])
|
||||||
[maxresults <Number>] [delimiter <String>]
|
[maxresults <Number>] [allfields|([settings] <GroupFieldName>* [fields <GroupFieldNameList>])] [delimiter <String>]
|
||||||
[members] [managers] [owners] [settings] <GroupFieldName>* [fields <GroupFieldNameList>]
|
[members|memberscount] [managers|managerscount] [owners|ownerscount]
|
||||||
|
|
||||||
gam print group-members|groups-members [todrive] ([domain <DomainName>] [member <UserItem>])|[group <GroupItem>]
|
gam print group-members|groups-members [todrive] ([domain <DomainName>] [member <UserItem>])|[group <GroupItem>]
|
||||||
[membernames] [fields <MembersFieldNameList>]
|
[membernames] [fields <MembersFieldNameList>]
|
||||||
|
|||||||
104
src/gam.py
104
src/gam.py
@@ -9092,7 +9092,7 @@ GROUP_ATTRIBUTES_ARGUMENT_TO_PROPERTY_MAP = {
|
|||||||
def doPrintGroups():
|
def doPrintGroups():
|
||||||
cd = buildGAPIObject(u'directory')
|
cd = buildGAPIObject(u'directory')
|
||||||
i = 3
|
i = 3
|
||||||
members = owners = managers = False
|
members = membersCountOnly = managers = managersCountOnly = owners = ownersCountOnly = False
|
||||||
customer = GC_Values[GC_CUSTOMER_ID]
|
customer = GC_Values[GC_CUSTOMER_ID]
|
||||||
usedomain = usemember = None
|
usedomain = usemember = None
|
||||||
aliasDelimiter = u' '
|
aliasDelimiter = u' '
|
||||||
@@ -9106,7 +9106,7 @@ def doPrintGroups():
|
|||||||
addFieldTitleToCSVfile(u'email', GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles)
|
addFieldTitleToCSVfile(u'email', GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles)
|
||||||
maxResults = None
|
maxResults = None
|
||||||
roles = []
|
roles = []
|
||||||
getSettings = False
|
getSettings = sortHeaders = False
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
myarg = sys.argv[i].lower()
|
myarg = sys.argv[i].lower()
|
||||||
if myarg == u'todrive':
|
if myarg == u'todrive':
|
||||||
@@ -9129,6 +9129,17 @@ def doPrintGroups():
|
|||||||
elif myarg in GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP:
|
elif myarg in GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP:
|
||||||
addFieldTitleToCSVfile(myarg, GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles)
|
addFieldTitleToCSVfile(myarg, GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles)
|
||||||
i += 1
|
i += 1
|
||||||
|
elif myarg == u'settings':
|
||||||
|
getSettings = True
|
||||||
|
i += 1
|
||||||
|
elif myarg == u'allfields':
|
||||||
|
getSettings = sortHeaders = True
|
||||||
|
cdfieldsList = []
|
||||||
|
gsfieldsList = []
|
||||||
|
fieldsTitles = {}
|
||||||
|
for field in GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP:
|
||||||
|
addFieldTitleToCSVfile(field, GROUP_ARGUMENT_TO_PROPERTY_TITLE_MAP, cdfieldsList, fieldsTitles, titles)
|
||||||
|
i += 1
|
||||||
elif myarg == u'fields':
|
elif myarg == u'fields':
|
||||||
fieldNameList = sys.argv[i+1]
|
fieldNameList = sys.argv[i+1]
|
||||||
for field in fieldNameList.lower().replace(u',', u' ').split():
|
for field in fieldNameList.lower().replace(u',', u' ').split():
|
||||||
@@ -9141,26 +9152,23 @@ def doPrintGroups():
|
|||||||
print u'ERROR: %s is not a valid argument for "gam print groups fields"' % field
|
print u'ERROR: %s is not a valid argument for "gam print groups fields"' % field
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'members':
|
elif myarg in [u'members', u'memberscount']:
|
||||||
if myarg not in roles:
|
roles.append(ROLE_MEMBER)
|
||||||
roles.append(ROLE_MEMBER)
|
members = True
|
||||||
addTitleToCSVfile(u'Members', titles)
|
if myarg == u'memberscount':
|
||||||
members = True
|
membersCountOnly = True
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg == u'owners':
|
elif myarg in [u'owners', u'ownerscount']:
|
||||||
if myarg not in roles:
|
roles.append(ROLE_OWNER)
|
||||||
roles.append(ROLE_OWNER)
|
owners = True
|
||||||
addTitleToCSVfile(u'Owners', titles)
|
if myarg == u'ownerscount':
|
||||||
owners = True
|
ownersCountOnly = True
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg == u'managers':
|
elif myarg in [u'managers', u'managerscount']:
|
||||||
if myarg not in roles:
|
roles.append(ROLE_MANAGER)
|
||||||
roles.append(ROLE_MANAGER)
|
managers = True
|
||||||
addTitleToCSVfile(u'Managers', titles)
|
if myarg == u'managerscount':
|
||||||
managers = True
|
managersCountOnly = True
|
||||||
i += 1
|
|
||||||
elif myarg == u'settings':
|
|
||||||
getSettings = True
|
|
||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
print u'ERROR: %s is not a valid argument for "gam print groups"' % sys.argv[i]
|
print u'ERROR: %s is not a valid argument for "gam print groups"' % sys.argv[i]
|
||||||
@@ -9174,6 +9182,19 @@ def doPrintGroups():
|
|||||||
if getSettings:
|
if getSettings:
|
||||||
gs = buildGAPIObject(u'groupssettings')
|
gs = buildGAPIObject(u'groupssettings')
|
||||||
roles = u','.join(sorted(set(roles)))
|
roles = u','.join(sorted(set(roles)))
|
||||||
|
if roles:
|
||||||
|
if members:
|
||||||
|
addTitlesToCSVfile([u'MembersCount',], titles)
|
||||||
|
if not membersCountOnly:
|
||||||
|
addTitlesToCSVfile([u'Members',], titles)
|
||||||
|
if managers:
|
||||||
|
addTitlesToCSVfile([u'ManagersCount',], titles)
|
||||||
|
if not managersCountOnly:
|
||||||
|
addTitlesToCSVfile([u'Managers',], titles)
|
||||||
|
if owners:
|
||||||
|
addTitlesToCSVfile([u'OwnersCount',], titles)
|
||||||
|
if not ownersCountOnly:
|
||||||
|
addTitlesToCSVfile([u'Owners',], titles)
|
||||||
sys.stderr.write(u"Retrieving All Groups for G Suite account (may take some time on a large account)...\n")
|
sys.stderr.write(u"Retrieving All Groups for G Suite account (may take some time on a large account)...\n")
|
||||||
page_message = u'Got %%num_items%% groups: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%num_items%% groups: %%first_item%% - %%last_item%%\n'
|
||||||
entityList = callGAPIpages(cd.groups(), u'list', u'groups',
|
entityList = callGAPIpages(cd.groups(), u'list', u'groups',
|
||||||
@@ -9200,11 +9221,14 @@ def doPrintGroups():
|
|||||||
page_message=page_message, message_attribute=u'email',
|
page_message=page_message, message_attribute=u'email',
|
||||||
groupKey=groupEmail, roles=roles, fields=u'nextPageToken,members(email,id,role)')
|
groupKey=groupEmail, roles=roles, fields=u'nextPageToken,members(email,id,role)')
|
||||||
if members:
|
if members:
|
||||||
allMembers = list()
|
membersList = []
|
||||||
|
membersCount = 0
|
||||||
if managers:
|
if managers:
|
||||||
allManagers = list()
|
managersList = []
|
||||||
|
managersCount = 0
|
||||||
if owners:
|
if owners:
|
||||||
allOwners = list()
|
ownersList = []
|
||||||
|
ownersCount = 0
|
||||||
for member in groupMembers:
|
for member in groupMembers:
|
||||||
member_email = member.get(u'email', member.get(u'id', None))
|
member_email = member.get(u'email', member.get(u'id', None))
|
||||||
if not member_email:
|
if not member_email:
|
||||||
@@ -9214,23 +9238,39 @@ def doPrintGroups():
|
|||||||
if role:
|
if role:
|
||||||
if role == ROLE_MEMBER:
|
if role == ROLE_MEMBER:
|
||||||
if members:
|
if members:
|
||||||
allMembers.append(member_email)
|
membersCount += 1
|
||||||
|
if not membersCountOnly:
|
||||||
|
membersList.append(member_email)
|
||||||
elif role == ROLE_MANAGER:
|
elif role == ROLE_MANAGER:
|
||||||
if managers:
|
if managers:
|
||||||
allManagers.append(member_email)
|
managersCount += 1
|
||||||
|
if not managersCountOnly:
|
||||||
|
managersList.append(member_email)
|
||||||
elif role == ROLE_OWNER:
|
elif role == ROLE_OWNER:
|
||||||
if owners:
|
if owners:
|
||||||
allOwners.append(member_email)
|
ownersCount += 1
|
||||||
|
if not ownersCountOnly:
|
||||||
|
ownersList.append(member_email)
|
||||||
elif members:
|
elif members:
|
||||||
allMembers.append(member_email)
|
membersCount += 1
|
||||||
|
if not membersCountOnly:
|
||||||
|
membersList.append(member_email)
|
||||||
elif members:
|
elif members:
|
||||||
allMembers.append(member_email)
|
membersCount += 1
|
||||||
|
if not membersCountOnly:
|
||||||
|
membersList.append(member_email)
|
||||||
if members:
|
if members:
|
||||||
group[u'Members'] = memberDelimiter.join(allMembers)
|
group[u'MembersCount'] = membersCount
|
||||||
|
if not membersCountOnly:
|
||||||
|
group[u'Members'] = memberDelimiter.join(membersList)
|
||||||
if managers:
|
if managers:
|
||||||
group[u'Managers'] = memberDelimiter.join(allManagers)
|
group[u'ManagersCount'] = managersCount
|
||||||
|
if not managersCountOnly:
|
||||||
|
group[u'Managers'] = memberDelimiter.join(managersList)
|
||||||
if owners:
|
if owners:
|
||||||
group[u'Owners'] = memberDelimiter.join(allOwners)
|
group[u'OwnersCount'] = ownersCount
|
||||||
|
if not ownersCountOnly:
|
||||||
|
group[u'Owners'] = memberDelimiter.join(ownersList)
|
||||||
if getSettings and not GroupIsAbuseOrPostmaster(groupEmail):
|
if getSettings and not GroupIsAbuseOrPostmaster(groupEmail):
|
||||||
sys.stderr.write(u" Retrieving Settings for group %s (%s/%s)...\r\n" % (groupEmail, i, count))
|
sys.stderr.write(u" Retrieving Settings for group %s (%s/%s)...\r\n" % (groupEmail, i, count))
|
||||||
settings = callGAPI(gs.groups(), u'get',
|
settings = callGAPI(gs.groups(), u'get',
|
||||||
@@ -9250,6 +9290,8 @@ def doPrintGroups():
|
|||||||
else:
|
else:
|
||||||
sys.stderr.write(u" Settings unavailable for group %s (%s/%s)...\r\n" % (groupEmail, i, count))
|
sys.stderr.write(u" Settings unavailable for group %s (%s/%s)...\r\n" % (groupEmail, i, count))
|
||||||
csvRows.append(group)
|
csvRows.append(group)
|
||||||
|
if sortHeaders:
|
||||||
|
sortCSVTitles([u'Email',], titles)
|
||||||
writeCSVfile(csvRows, titles, u'Groups', todrive)
|
writeCSVfile(csvRows, titles, u'Groups', todrive)
|
||||||
|
|
||||||
ORG_ARGUMENT_TO_PROPERTY_TITLE_MAP = {
|
ORG_ARGUMENT_TO_PROPERTY_TITLE_MAP = {
|
||||||
|
|||||||
Reference in New Issue
Block a user