mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-09 06:03:35 +00:00
languages update; fields for gam info user; cloud identity groups update to v1 (#1459)
* languages update The API doesn't return languages unless you specifically mention in in fields list * languages cleanup in print users * Add fields to gam info user * No up for languages * Use v1 for Cloud Identity groups; fix bug in print cigroups member * It's an error to set preference on custom language
This commit is contained in:
@ -595,7 +595,7 @@ Items, separated by spaces, with spaces, commas or single quotes in the items th
|
|||||||
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
<GroupRoleList> ::= "<GroupRole>(,<GroupRole>)*"
|
||||||
<GuardianStateList> ::= "<GuardianState>(,<GuardianState>)*"
|
<GuardianStateList> ::= "<GuardianState>(,<GuardianState>)*"
|
||||||
<LabelNameList> ::= "<LabelName>(,<LabelName)*"
|
<LabelNameList> ::= "<LabelName>(,<LabelName)*"
|
||||||
<LanguageList> ::= "<Language>(,<Language)*"
|
<LanguageList> ::= "<Language>[+|-](,<Language>[+|-])*"
|
||||||
<MatterItemList> ::= "<MatterItem>(,<MatterItem>)*"
|
<MatterItemList> ::= "<MatterItem>(,<MatterItem>)*"
|
||||||
<MembersFieldNameList> ::= "<MembersFieldName>(,<MembersFieldName>)*"
|
<MembersFieldNameList> ::= "<MembersFieldName>(,<MembersFieldName>)*"
|
||||||
<MobileList> ::= "<MobileId>(,<MobileId>)*"
|
<MobileList> ::= "<MobileId>(,<MobileId>)*"
|
||||||
@ -1018,7 +1018,8 @@ gam info customer
|
|||||||
|
|
||||||
gam create datatransfer|transfer <OldOwnerID> <DataTransferServiceList> <NewOwnerID> (<ParameterKey> <ParameterValue>)*
|
gam create datatransfer|transfer <OldOwnerID> <DataTransferServiceList> <NewOwnerID> (<ParameterKey> <ParameterValue>)*
|
||||||
gam info datatransfer|transfer <TransferID>
|
gam info datatransfer|transfer <TransferID>
|
||||||
gam print datatransfers|transfers [todrive] [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>] [status <String>]
|
gam print datatransfers|transfers [todrive] [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
|
||||||
|
[status completed|failed|inprogress]
|
||||||
|
|
||||||
gam print transferapps
|
gam print transferapps
|
||||||
|
|
||||||
@ -1470,7 +1471,11 @@ gam create user <EmailAddress> <UserAttribute>* [verifynotinvitable]
|
|||||||
gam update user <UserItem> <UserAttribute>* [clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>] [verifynotinvitable]
|
gam update user <UserItem> <UserAttribute>* [clearschema <SchemaName>] [clearschema <SchemaName>.<FieldName>] [verifynotinvitable]
|
||||||
gam delete user <UserItem>
|
gam delete user <UserItem>
|
||||||
gam undelete user <UserItem> [org|ou <OrgUnitPath>]
|
gam undelete user <UserItem> [org|ou <OrgUnitPath>]
|
||||||
gam info user [<UserItem>] [noaliases] [nogroups] [nolicenses|nolicences] [noschemas] [schemas|custom <SchemaNameList>] [userview] [skus|sku <SKUIDList>] [grouptree]
|
gam info user [<UserItem>]
|
||||||
|
[quick] [noaliases] [nogroups] [nolicenses|nolicences] [noschemas]
|
||||||
|
[skus|sku <SKUIDList>] [grouptree]
|
||||||
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
[schemas|custom all|<SchemaNameList>]
|
||||||
|
|
||||||
Print fields for selected users; use domain, query/queries and deleted_only to select users to print;
|
Print fields for selected users; use domain, query/queries and deleted_only to select users to print;
|
||||||
if none of these options are specified, all users are printed.
|
if none of these options are specified, all users are printed.
|
||||||
@ -1481,8 +1486,9 @@ gam print users [todrive]
|
|||||||
([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||||
[limittoou <OrgUnitPath>] [deleted_only|only_deleted])
|
[limittoou <OrgUnitPath>] [deleted_only|only_deleted])
|
||||||
[groups] [license|licenses|licence|licences] [emailpart|emailparts|username]
|
[groups] [license|licenses|licence|licences] [emailpart|emailparts|username]
|
||||||
[orderby <UserOrderByFieldName> [ascending|descending]] [userview]
|
[orderby <UserOrderByFieldName> [ascending|descending]]
|
||||||
[allfields|basic|full | ((<UserFieldName>* | fields <UserFieldNameList>) [schemas|custom all|<SchemaNameList>])]
|
[userview] [allfields|basic|full | (<UserFieldName>* | fields <UserFieldNameList>)]
|
||||||
|
[schemas|custom all|<SchemaNameList>])]
|
||||||
[delimiter <Character>] [sortheaders]
|
[delimiter <Character>] [sortheaders]
|
||||||
|
|
||||||
gam create verify|verification <DomainName>
|
gam create verify|verification <DomainName>
|
||||||
|
@ -6695,14 +6695,23 @@ def getUserAttributes(i, cd, updateCmd):
|
|||||||
for language in sys.argv[i].replace(',', ' ').split():
|
for language in sys.argv[i].replace(',', ' ').split():
|
||||||
lang_item = {}
|
lang_item = {}
|
||||||
if language[-1] == '+':
|
if language[-1] == '+':
|
||||||
|
suffix = '+'
|
||||||
language = language[:-1]
|
language = language[:-1]
|
||||||
lang_item['preference'] = 'preferred'
|
lang_item['preference'] = 'preferred'
|
||||||
elif language[-1] == '-':
|
elif language[-1] == '-':
|
||||||
|
suffix = '-'
|
||||||
language = language[:-1]
|
language = language[:-1]
|
||||||
lang_item['preference'] = 'not_preferred'
|
lang_item['preference'] = 'not_preferred'
|
||||||
|
else:
|
||||||
|
suffix = ''
|
||||||
if language.lower() in LANGUAGE_CODES_MAP:
|
if language.lower() in LANGUAGE_CODES_MAP:
|
||||||
lang_item['languageCode'] = LANGUAGE_CODES_MAP[language.lower()]
|
lang_item['languageCode'] = LANGUAGE_CODES_MAP[language.lower()]
|
||||||
else:
|
else:
|
||||||
|
if suffix:
|
||||||
|
controlflow.system_error_exit(
|
||||||
|
2,
|
||||||
|
f'suffix {suffix} not allowed with customLanguage {language}'
|
||||||
|
)
|
||||||
lang_item['customLanguage'] = language
|
lang_item['customLanguage'] = language
|
||||||
appendItemToBodyList(body, 'languages', lang_item)
|
appendItemToBodyList(body, 'languages', lang_item)
|
||||||
i += 1
|
i += 1
|
||||||
@ -8775,6 +8784,20 @@ def _get_admin_email():
|
|||||||
)
|
)
|
||||||
return _getValueFromOAuth('email')
|
return _getValueFromOAuth('email')
|
||||||
|
|
||||||
|
def _formatLanguagesList(propertyValue, delimiter):
|
||||||
|
languages = []
|
||||||
|
for language in propertyValue:
|
||||||
|
if 'languageCode' in language:
|
||||||
|
lang = language['languageCode']
|
||||||
|
if language.get('preference') == 'preferred':
|
||||||
|
lang += '+'
|
||||||
|
elif language.get('preference') == 'not_preferred':
|
||||||
|
lang += '-'
|
||||||
|
else:
|
||||||
|
lang = language.get('customLanguage')
|
||||||
|
languages.append(lang)
|
||||||
|
return delimiter.join(languages)
|
||||||
|
|
||||||
def doGetUserInfo(user_email=None):
|
def doGetUserInfo(user_email=None):
|
||||||
|
|
||||||
def user_lic_result(request_id, response, exception):
|
def user_lic_result(request_id, response, exception):
|
||||||
@ -8789,6 +8812,7 @@ def doGetUserInfo(user_email=None):
|
|||||||
i = 4
|
i = 4
|
||||||
else:
|
else:
|
||||||
user_email = _get_admin_email()
|
user_email = _get_admin_email()
|
||||||
|
fieldsList = []
|
||||||
getSchemas = True
|
getSchemas = True
|
||||||
getAliases = True
|
getAliases = True
|
||||||
getGroups = True
|
getGroups = True
|
||||||
@ -8819,10 +8843,35 @@ def doGetUserInfo(user_email=None):
|
|||||||
getSchemas = False
|
getSchemas = False
|
||||||
projection = 'basic'
|
projection = 'basic'
|
||||||
i += 1
|
i += 1
|
||||||
|
elif myarg == 'quick':
|
||||||
|
getAliases = getCIGroups = getGroups = getLicenses = getSchemas = False
|
||||||
|
i += 1
|
||||||
elif myarg in ['custom', 'schemas']:
|
elif myarg in ['custom', 'schemas']:
|
||||||
getSchemas = True
|
getSchemas = True
|
||||||
|
if not fieldsList:
|
||||||
|
fieldsList = ['primaryEmail']
|
||||||
|
fieldsList.append('customSchemas')
|
||||||
|
if sys.argv[i + 1].lower() == 'all':
|
||||||
|
projection = 'full'
|
||||||
|
else:
|
||||||
projection = 'custom'
|
projection = 'custom'
|
||||||
customFieldMask = sys.argv[i + 1]
|
customFieldMask = sys.argv[i + 1].replace(' ', ',')
|
||||||
|
i += 2
|
||||||
|
elif myarg in USER_ARGUMENT_TO_PROPERTY_MAP:
|
||||||
|
if not fieldsList:
|
||||||
|
fieldsList = ['primaryEmail',]
|
||||||
|
fieldsList.extend(USER_ARGUMENT_TO_PROPERTY_MAP[myarg])
|
||||||
|
i += 1
|
||||||
|
elif myarg == 'fields':
|
||||||
|
if not fieldsList:
|
||||||
|
fieldsList = ['primaryEmail',]
|
||||||
|
fieldNameList = sys.argv[i + 1]
|
||||||
|
for field in fieldNameList.lower().replace(',', ' ').split():
|
||||||
|
if field in USER_ARGUMENT_TO_PROPERTY_MAP:
|
||||||
|
fieldsList.extend(USER_ARGUMENT_TO_PROPERTY_MAP[field])
|
||||||
|
else:
|
||||||
|
controlflow.invalid_argument_exit(field,
|
||||||
|
'gam info users fields')
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == 'userview':
|
elif myarg == 'userview':
|
||||||
viewType = 'domain_public'
|
viewType = 'domain_public'
|
||||||
@ -8836,6 +8885,7 @@ def doGetUserInfo(user_email=None):
|
|||||||
'get',
|
'get',
|
||||||
userKey=user_email,
|
userKey=user_email,
|
||||||
projection=projection,
|
projection=projection,
|
||||||
|
fields=','.join(set(fieldsList)) if fieldsList else '*',
|
||||||
customFieldMask=customFieldMask,
|
customFieldMask=customFieldMask,
|
||||||
viewType=viewType)
|
viewType=viewType)
|
||||||
print(f'User: {user["primaryEmail"]}')
|
print(f'User: {user["primaryEmail"]}')
|
||||||
@ -8844,19 +8894,7 @@ def doGetUserInfo(user_email=None):
|
|||||||
if 'name' in user and 'familyName' in user['name']:
|
if 'name' in user and 'familyName' in user['name']:
|
||||||
print(f'Last Name: {user["name"]["familyName"]}')
|
print(f'Last Name: {user["name"]["familyName"]}')
|
||||||
if 'languages' in user:
|
if 'languages' in user:
|
||||||
languages = []
|
print(f"Languages: {_formatLanguagesList(user['languages'], ',')}")
|
||||||
for language in user['languages']:
|
|
||||||
if 'languageCode' in language:
|
|
||||||
lang = language['languageCode']
|
|
||||||
if language.get('preference') == 'preferred':
|
|
||||||
lang += '+'
|
|
||||||
elif language.get('preference') == 'not_preferred':
|
|
||||||
lang += '-'
|
|
||||||
else:
|
|
||||||
lang = language.get('customLanguage')
|
|
||||||
languages.append(lang)
|
|
||||||
if languages:
|
|
||||||
print(f'Custom Languages: {",".join(languages)}')
|
|
||||||
if 'isAdmin' in user:
|
if 'isAdmin' in user:
|
||||||
print(f'Is a Super Admin: {user["isAdmin"]}')
|
print(f'Is a Super Admin: {user["isAdmin"]}')
|
||||||
if 'isDelegatedAdmin' in user:
|
if 'isDelegatedAdmin' in user:
|
||||||
@ -9701,7 +9739,7 @@ def doPrintUsers():
|
|||||||
projection = 'full'
|
projection = 'full'
|
||||||
else:
|
else:
|
||||||
projection = 'custom'
|
projection = 'custom'
|
||||||
customFieldMask = sys.argv[i + 1]
|
customFieldMask = sys.argv[i + 1].replace(' ', ',')
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == 'todrive':
|
elif myarg == 'todrive':
|
||||||
todrive = True
|
todrive = True
|
||||||
@ -9742,17 +9780,13 @@ def doPrintUsers():
|
|||||||
i += 2
|
i += 2
|
||||||
elif myarg in USER_ARGUMENT_TO_PROPERTY_MAP:
|
elif myarg in USER_ARGUMENT_TO_PROPERTY_MAP:
|
||||||
if not fieldsList:
|
if not fieldsList:
|
||||||
fieldsList = [
|
fieldsList = ['primaryEmail',]
|
||||||
'primaryEmail',
|
|
||||||
]
|
|
||||||
display.add_field_to_csv_file(myarg, USER_ARGUMENT_TO_PROPERTY_MAP,
|
display.add_field_to_csv_file(myarg, USER_ARGUMENT_TO_PROPERTY_MAP,
|
||||||
fieldsList, fieldsTitles, titles)
|
fieldsList, fieldsTitles, titles)
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg == 'fields':
|
elif myarg == 'fields':
|
||||||
if not fieldsList:
|
if not fieldsList:
|
||||||
fieldsList = [
|
fieldsList = ['primaryEmail',]
|
||||||
'primaryEmail',
|
|
||||||
]
|
|
||||||
fieldNameList = sys.argv[i + 1]
|
fieldNameList = sys.argv[i + 1]
|
||||||
for field in fieldNameList.lower().replace(',', ' ').split():
|
for field in fieldNameList.lower().replace(',', ' ').split():
|
||||||
if field in USER_ARGUMENT_TO_PROPERTY_MAP:
|
if field in USER_ARGUMENT_TO_PROPERTY_MAP:
|
||||||
@ -9814,6 +9848,8 @@ def doPrintUsers():
|
|||||||
if user_email.find('@') != -1:
|
if user_email.find('@') != -1:
|
||||||
user['primaryEmailLocal'], user[
|
user['primaryEmailLocal'], user[
|
||||||
'primaryEmailDomain'] = splitEmailAddress(user_email)
|
'primaryEmailDomain'] = splitEmailAddress(user_email)
|
||||||
|
if 'languages' in user:
|
||||||
|
user['languages'] = _formatLanguagesList(user.pop('languages'), ' ')
|
||||||
display.add_row_titles_to_csv_file(utils.flatten_json(user),
|
display.add_row_titles_to_csv_file(utils.flatten_json(user),
|
||||||
csvRows, titles)
|
csvRows, titles)
|
||||||
if sortHeaders:
|
if sortHeaders:
|
||||||
|
@ -12,6 +12,14 @@ from gam.gapi import errors as gapi_errors
|
|||||||
from gam.gapi import cloudidentity as gapi_cloudidentity
|
from gam.gapi import cloudidentity as gapi_cloudidentity
|
||||||
from gam.gapi.directory import customer as gapi_directory_customer
|
from gam.gapi.directory import customer as gapi_directory_customer
|
||||||
|
|
||||||
|
# This allows easy switching between v1 and v1beta1
|
||||||
|
# v1
|
||||||
|
CIGROUP_API_BETA = 'cloudidentity'
|
||||||
|
CIGROUP_MEMBERKEY = 'preferredMemberKey'
|
||||||
|
# v1beta1
|
||||||
|
#CIGROUP_API_BETA = 'cloudidentity_beta'
|
||||||
|
#CIGROUP_MEMBERKEY = 'memberKey'
|
||||||
|
|
||||||
|
|
||||||
def create():
|
def create():
|
||||||
ci = gapi_cloudidentity.build()
|
ci = gapi_cloudidentity.build()
|
||||||
@ -73,7 +81,7 @@ def delete():
|
|||||||
|
|
||||||
|
|
||||||
def info():
|
def info():
|
||||||
ci = gapi_cloudidentity.build('cloudidentity_beta')
|
ci = gapi_cloudidentity.build(CIGROUP_API_BETA)
|
||||||
group = gam.normalizeEmailAddressOrUID(sys.argv[3])
|
group = gam.normalizeEmailAddressOrUID(sys.argv[3])
|
||||||
getUsers = True
|
getUsers = True
|
||||||
getSecuritySettings = True
|
getSecuritySettings = True
|
||||||
@ -126,7 +134,7 @@ def info():
|
|||||||
print(' Members:')
|
print(' Members:')
|
||||||
for member in members:
|
for member in members:
|
||||||
role = get_single_role(member.get('roles', [])).lower()
|
role = get_single_role(member.get('roles', [])).lower()
|
||||||
email = member.get('preferredMemberKey', {}).get('id')
|
email = member.get(CIGROUP_MEMBERKEY, {}).get('id')
|
||||||
member_type = member.get('type', 'USER').lower()
|
member_type = member.get('type', 'USER').lower()
|
||||||
jc_string = ''
|
jc_string = ''
|
||||||
if showJoinDate:
|
if showJoinDate:
|
||||||
@ -155,7 +163,7 @@ def print_member_tree(ci, group_id, cached_group_members, spaces, show_role):
|
|||||||
for member in cached_group_members[group_id]:
|
for member in cached_group_members[group_id]:
|
||||||
member_id = member.get('name', '')
|
member_id = member.get('name', '')
|
||||||
member_id = member_id.split('/')[-1]
|
member_id = member_id.split('/')[-1]
|
||||||
email = member.get('preferredMemberKey', {}).get('id')
|
email = member.get(CIGROUP_MEMBERKEY, {}).get('id')
|
||||||
member_type = member.get('type', 'USER').lower()
|
member_type = member.get('type', 'USER').lower()
|
||||||
if show_role:
|
if show_role:
|
||||||
role = get_single_role(member.get('roles', [])).lower()
|
role = get_single_role(member.get('roles', [])).lower()
|
||||||
@ -197,7 +205,7 @@ GROUP_ROLES_MAP = {
|
|||||||
|
|
||||||
|
|
||||||
def print_():
|
def print_():
|
||||||
ci = gapi_cloudidentity.build('cloudidentity_beta')
|
ci = gapi_cloudidentity.build(CIGROUP_API_BETA)
|
||||||
i = 3
|
i = 3
|
||||||
members = False
|
members = False
|
||||||
membersCountOnly = False
|
membersCountOnly = False
|
||||||
@ -335,12 +343,12 @@ def print_():
|
|||||||
)
|
)
|
||||||
page_message = gapi.got_total_items_first_last_msg('Members')
|
page_message = gapi.got_total_items_first_last_msg('Members')
|
||||||
validRoles, _, _ = gam._getRoleVerification(
|
validRoles, _, _ = gam._getRoleVerification(
|
||||||
'.'.join(roles), 'nextPageToken,members(email,id,role)')
|
','.join(roles), 'nextPageToken,members(email,id,role)')
|
||||||
groupMembers = gapi.get_all_pages(ci.groups().memberships(),
|
groupMembers = gapi.get_all_pages(ci.groups().memberships(),
|
||||||
'list',
|
'list',
|
||||||
'memberships',
|
'memberships',
|
||||||
page_message=page_message,
|
page_message=page_message,
|
||||||
message_attribute=['preferredMemberKey', 'id'],
|
message_attribute=[CIGROUP_MEMBERKEY, 'id'],
|
||||||
soft_errors=True,
|
soft_errors=True,
|
||||||
parent=groupKey_id,
|
parent=groupKey_id,
|
||||||
view='BASIC')
|
view='BASIC')
|
||||||
@ -354,7 +362,7 @@ def print_():
|
|||||||
ownersList = []
|
ownersList = []
|
||||||
ownersCount = 0
|
ownersCount = 0
|
||||||
for member in groupMembers:
|
for member in groupMembers:
|
||||||
member_email = member['preferredMemberKey']['id']
|
member_email = member[CIGROUP_MEMBERKEY]['id']
|
||||||
role = get_single_role(member.get('roles', []))
|
role = get_single_role(member.get('roles', []))
|
||||||
if not validRoles or role in validRoles:
|
if not validRoles or role in validRoles:
|
||||||
if role == ROLE_MEMBER:
|
if role == ROLE_MEMBER:
|
||||||
@ -447,7 +455,7 @@ def _get_groups_list(ci=None, member=None, parent=None):
|
|||||||
|
|
||||||
|
|
||||||
def get_membership_graph(member):
|
def get_membership_graph(member):
|
||||||
ci = gapi_cloudidentity.build('cloudidentity_beta')
|
ci = gapi_cloudidentity.build(CIGROUP_API_BETA)
|
||||||
query = f"member_key_id == '{member}' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels"
|
query = f"member_key_id == '{member}' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels"
|
||||||
result = gapi.call(ci.groups().memberships(),
|
result = gapi.call(ci.groups().memberships(),
|
||||||
'getMembershipGraph',
|
'getMembershipGraph',
|
||||||
@ -457,7 +465,7 @@ def get_membership_graph(member):
|
|||||||
|
|
||||||
|
|
||||||
def print_members():
|
def print_members():
|
||||||
ci = gapi_cloudidentity.build('cloudidentity_beta')
|
ci = gapi_cloudidentity.build(CIGROUP_API_BETA)
|
||||||
todrive = False
|
todrive = False
|
||||||
gapi_directory_customer.setTrueCustomerId()
|
gapi_directory_customer.setTrueCustomerId()
|
||||||
parent = f'customers/{GC_Values[GC_CUSTOMER_ID]}'
|
parent = f'customers/{GC_Values[GC_CUSTOMER_ID]}'
|
||||||
@ -514,8 +522,8 @@ def print_members():
|
|||||||
view='FULL',
|
view='FULL',
|
||||||
pageSize=500,
|
pageSize=500,
|
||||||
page_message=page_message,
|
page_message=page_message,
|
||||||
message_attribute=['preferredMemberKey', 'id'])
|
message_attribute=[CIGROUP_MEMBERKEY, 'id'])
|
||||||
#fields='nextPageToken,memberships(preferredMemberKey,roles,createTime,updateTime)')
|
#fields=f'nextPageToken,memberships({CIGROUP_MEMBERKEY},roles,createTime,updateTime)')
|
||||||
if roles:
|
if roles:
|
||||||
group_members = filter_members_to_roles(group_members, roles)
|
group_members = filter_members_to_roles(group_members, roles)
|
||||||
for member in group_members:
|
for member in group_members:
|
||||||
@ -573,7 +581,7 @@ def update():
|
|||||||
]
|
]
|
||||||
return (role, expireTime, users_email)
|
return (role, expireTime, users_email)
|
||||||
|
|
||||||
ci = gapi_cloudidentity.build('cloudidentity_beta')
|
ci = gapi_cloudidentity.build(CIGROUP_API_BETA)
|
||||||
group = sys.argv[3]
|
group = sys.argv[3]
|
||||||
myarg = sys.argv[4].lower()
|
myarg = sys.argv[4].lower()
|
||||||
items = []
|
items = []
|
||||||
@ -600,7 +608,7 @@ def update():
|
|||||||
items.append(item)
|
items.append(item)
|
||||||
elif len(users_email) > 0:
|
elif len(users_email) > 0:
|
||||||
body = {
|
body = {
|
||||||
'preferredMemberKey': {
|
CIGROUP_MEMBERKEY: {
|
||||||
'id': users_email[0]
|
'id': users_email[0]
|
||||||
},
|
},
|
||||||
'roles': [{
|
'roles': [{
|
||||||
@ -820,12 +828,12 @@ def update():
|
|||||||
page_message=page_message,
|
page_message=page_message,
|
||||||
throw_reasons=gapi_errors.MEMBERS_THROW_REASONS,
|
throw_reasons=gapi_errors.MEMBERS_THROW_REASONS,
|
||||||
parent=parent,
|
parent=parent,
|
||||||
fields='nextPageToken,memberships(preferredMemberKey,roles)')
|
fields=f'nextPageToken,memberships({CIGROUP_MEMBERKEY},roles)')
|
||||||
result = filter_members_to_roles(result, roles)
|
result = filter_members_to_roles(result, roles)
|
||||||
if not result:
|
if not result:
|
||||||
print('Group already has 0 members')
|
print('Group already has 0 members')
|
||||||
return
|
return
|
||||||
users_email = [member['preferredMemberKey']['id'] for member in result]
|
users_email = [member[CIGROUP_MEMBERKEY]['id'] for member in result]
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
f'Group: {group}, Will remove {len(users_email)} {", ".join(roles).lower()}s.\n'
|
f'Group: {group}, Will remove {len(users_email)} {", ".join(roles).lower()}s.\n'
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user