Add limittoou <OrgUnitPath> to print users to allow selection of OU w/o children (#1455)

This commit is contained in:
Ross Scroggs
2021-12-09 07:35:47 -08:00
committed by GitHub
parent f9ca0323a1
commit 6b63ecdc19
2 changed files with 28 additions and 9 deletions

View File

@@ -207,8 +207,9 @@ If an item contains spaces, it should be surrounded by ".
<Namespace> ::= <String> <Namespace> ::= <String>
<NotificationID> ::= <String> <NotificationID> ::= <String>
<NumberOfSeats> ::= <Number> <NumberOfSeats> ::= <Number>
<OrgUnitID> ::= <String> <OrgUnitID> ::= id:<String>
<OrgUnitPath> ::= /|(/<String)+ <OrgUnitPath> ::= /|(/<String)+
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
<ParameterKey> ::= <String> <ParameterKey> ::= <String>
<ParameterValue> ::= <String> <ParameterValue> ::= <String>
<Password> ::= <String> <Password> ::= <String>
@@ -1477,7 +1478,8 @@ The first column will always be primaryEmail; the remaining field names will be
otherwise, the remaining field names will appear in the order specified. otherwise, the remaining field names will appear in the order specified.
gam print users [todrive] gam print users [todrive]
([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)] [deleted_only|only_deleted]) ([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
[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]] [userview]
[allfields|basic|full | ((<UserFieldName>* | fields <UserFieldNameList>) [schemas|custom all|<SchemaNameList>])] [allfields|basic|full | ((<UserFieldName>* | fields <UserFieldNameList>) [schemas|custom all|<SchemaNameList>])]

View File

@@ -9661,6 +9661,7 @@ def doPrintUsers():
customFieldMask = None customFieldMask = None
sortHeaders = getGroupFeed = getLicenseFeed = email_parts = False sortHeaders = getGroupFeed = getLicenseFeed = email_parts = False
viewType = deleted_only = orderBy = sortOrder = None viewType = deleted_only = orderBy = sortOrder = None
orgUnitPath = orgUnitPathLower = None
groupDelimiter = ' ' groupDelimiter = ' '
licenseDelimiter = ',' licenseDelimiter = ','
i = 3 i = 3
@@ -9725,6 +9726,10 @@ def doPrintUsers():
elif myarg in ['query', 'queries']: elif myarg in ['query', 'queries']:
queries = getQueries(myarg, sys.argv[i + 1]) queries = getQueries(myarg, sys.argv[i + 1])
i += 2 i += 2
elif myarg == 'limittoou':
orgUnitPath = gapi_directory_orgunits.getOrgUnitItem(sys.argv[i + 1], pathOnly=True)
orgUnitPathLower = orgUnitPath.lower()
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 = [
@@ -9760,10 +9765,21 @@ def doPrintUsers():
else: else:
controlflow.invalid_argument_exit(sys.argv[i], 'gam print users') controlflow.invalid_argument_exit(sys.argv[i], 'gam print users')
if fieldsList: if fieldsList:
if orgUnitPath is not None:
fieldsList.append('orgUnitPath')
fields = f'nextPageToken,users({",".join(set(fieldsList)).replace(".", "/")})' fields = f'nextPageToken,users({",".join(set(fieldsList)).replace(".", "/")})'
else: else:
fields = None fields = None
for query in queries: for query in queries:
if orgUnitPath is not None:
if query is not None and query.find(orgUnitPath) == -1:
query += f" orgUnitPath='{orgUnitPath}'"
else:
if query is None:
query = ''
else:
query += ' '
query += f"orgUnitPath='{orgUnitPath}'"
printGettingAllItems('Users', query) printGettingAllItems('Users', query)
page_message = gapi.got_total_items_first_last_msg('Users') page_message = gapi.got_total_items_first_last_msg('Users')
all_users = gapi.get_all_pages(cd.users(), all_users = gapi.get_all_pages(cd.users(),
@@ -9782,6 +9798,7 @@ def doPrintUsers():
projection=projection, projection=projection,
customFieldMask=customFieldMask) customFieldMask=customFieldMask)
for user in all_users: for user in all_users:
if orgUnitPathLower is None or orgUnitPathLower == user.get('orgUnitPath', '').lower():
if email_parts and ('primaryEmail' in user): if email_parts and ('primaryEmail' in user):
user_email = user['primaryEmail'] user_email = user['primaryEmail']
if user_email.find('@') != -1: if user_email.find('@') != -1: