Add gam update group <Group> clear [member] [manager] [owner]

This commit is contained in:
Ross Scroggs
2016-06-27 23:19:12 -07:00
parent 4b380be637
commit 159d4cf085
3 changed files with 29 additions and 7 deletions

View File

@ -531,6 +531,7 @@ gam update group <GroupItem> sync [owner|manager|member] <UserTypeEntity>
gam update group <GroupItem> update [owner|manager|member] <UserTypeEntity> gam update group <GroupItem> update [owner|manager|member] <UserTypeEntity>
gam delete group <GroupItem> gam delete group <GroupItem>
gam info group <GroupItem> [nousers] [noaliases] [groups] gam info group <GroupItem> [nousers] [noaliases] [groups]
gam update group <GroupItem> clear [owner] [manager] [member]
gam print groups [todrive] ([domain <DomainName>] [member <UserItem>]) gam print groups [todrive] ([domain <DomainName>] [member <UserItem>])
[maxresults <Number>] [delimiter <String>] [maxresults <Number>] [delimiter <String>]

View File

@ -6181,12 +6181,13 @@ def doRemoveUsersGroups(users):
def doUpdateGroup(): def doUpdateGroup():
cd = buildGAPIObject(u'directory') cd = buildGAPIObject(u'directory')
group = sys.argv[3] group = sys.argv[3]
if sys.argv[4].lower() in [u'add', u'update', u'sync', u'remove']: myarg = sys.argv[4].lower()
if myarg in [u'add', u'update', u'sync', u'remove', u'clear']:
if group[0:3].lower() == u'uid:': if group[0:3].lower() == u'uid:':
group = group[4:] group = group[4:]
elif group.find(u'@') == -1: elif group.find(u'@') == -1:
group = u'%s@%s' % (group, GC_Values[GC_DOMAIN]) group = u'%s@%s' % (group, GC_Values[GC_DOMAIN])
if sys.argv[4].lower() in [u'add', u'update']: if myarg in [u'add', u'update']:
role = sys.argv[5].upper() role = sys.argv[5].upper()
i = 6 i = 6
if role not in [u'OWNER', u'MANAGER', u'MEMBER']: if role not in [u'OWNER', u'MANAGER', u'MEMBER']:
@ -6200,16 +6201,16 @@ def doUpdateGroup():
for user_email in users_email: for user_email in users_email:
if user_email != u'*' and user_email.find(u'@') == -1: if user_email != u'*' and user_email.find(u'@') == -1:
user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN]) user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN])
sys.stderr.write(u' %sing %s %s...\n' % (sys.argv[4].lower(), role.lower(), user_email)) sys.stderr.write(u' %sing %s %s...\n' % (myarg, role.lower(), user_email))
try: try:
if sys.argv[4].lower() == u'add': if myarg == u'add':
body = {u'role': role, u'email': user_email} body = {u'role': role, u'email': user_email}
callGAPI(cd.members(), u'insert', soft_errors=True, groupKey=group, body=body) callGAPI(cd.members(), u'insert', soft_errors=True, groupKey=group, body=body)
elif sys.argv[4].lower() == u'update': else:
callGAPI(cd.members(), u'update', soft_errors=True, groupKey=group, memberKey=user_email, body=body) callGAPI(cd.members(), u'update', soft_errors=True, groupKey=group, memberKey=user_email, body=body)
except googleapiclient.errors.HttpError: except googleapiclient.errors.HttpError:
pass pass
elif sys.argv[4].lower() == u'sync': elif myarg == u'sync':
role = sys.argv[5].upper() role = sys.argv[5].upper()
i = 6 i = 6
if role not in [u'OWNER', u'MANAGER', u'MEMBER']: if role not in [u'OWNER', u'MANAGER', u'MEMBER']:
@ -6228,7 +6229,7 @@ def doUpdateGroup():
for user_email in to_remove: for user_email in to_remove:
items.append([u'update', u'group', group, u'remove', user_email]) items.append([u'update', u'group', group, u'remove', user_email])
run_batch(items) run_batch(items)
elif sys.argv[4].lower() == u'remove': elif myarg == u'remove':
i = 5 i = 5
if sys.argv[i].lower() in [u'member', u'manager', u'owner']: if sys.argv[i].lower() in [u'member', u'manager', u'owner']:
i += 1 i += 1
@ -6243,6 +6244,25 @@ def doUpdateGroup():
user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN]) user_email = u'%s@%s' % (user_email, GC_Values[GC_DOMAIN])
sys.stderr.write(u' removing %s\n' % user_email) sys.stderr.write(u' removing %s\n' % user_email)
callGAPI(cd.members(), u'delete', soft_errors=True, groupKey=group, memberKey=user_email) callGAPI(cd.members(), u'delete', soft_errors=True, groupKey=group, memberKey=user_email)
else: # clear
roles = []
i = 5
while i < len(sys.argv):
role = sys.argv[i].upper()
if role in [u'OWNER', u'MANAGER', u'MEMBER']:
roles.append(role)
i += 1
else:
print u'ERROR: %s is not a valid argument for "gam update group clear"' % sys.argv[i]
sys.exit(2)
if roles:
roles = u','.join(sorted(set(roles)))
else:
roles = u'MEMBER'
user_emails = getUsersToModify(entity_type=u'group', entity=group, member_type=roles)
for user_email in user_emails:
sys.stderr.write(u' removing %s\n' % user_email)
callGAPI(cd.members(), u'delete', soft_errors=True, groupKey=group, memberKey=user_email)
else: else:
i = 4 i = 4
use_cd_api = False use_cd_api = False

View File

@ -15,6 +15,7 @@ GAM 3.66
-Add domain <DomainName> and member <EmailAddress> arguments to gam print group-members to allow selecting subsets of groups -Add domain <DomainName> and member <EmailAddress> arguments to gam print group-members to allow selecting subsets of groups
-Add showcounts argument to gam <Users> show labels to allow seeing message counts for each label -Add showcounts argument to gam <Users> show labels to allow seeing message counts for each label
-Add arguments to gam <Users> show fileinfo <DriveFileId> <DriveFieldName>* to allow field selection -Add arguments to gam <Users> show fileinfo <DriveFileId> <DriveFieldName>* to allow field selection
-Add option to gam update group to allow clearing members: gam update group <GroupItem> clear [owner] [manager] [member]
GAM 3.65 GAM 3.65
-fix vacation issues (Ross) -fix vacation issues (Ross)