mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-03 22:01:39 +00:00
Expanded <UserTypeEntity> to allow specification of non-archived/archived users.
This commit is contained in:
@@ -428,6 +428,8 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
<CourseWorkState> ::= draft|published|deleted
|
<CourseWorkState> ::= draft|published|deleted
|
||||||
<CrOSID> ::= <String>
|
<CrOSID> ::= <String>
|
||||||
<CustomerID> ::= <String>
|
<CustomerID> ::= <String>
|
||||||
|
<DateTimeFormat> ::= <String>
|
||||||
|
See: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
|
||||||
<DeliverySetting> ::=
|
<DeliverySetting> ::=
|
||||||
allmail|
|
allmail|
|
||||||
abridged|daily|
|
abridged|daily|
|
||||||
@@ -663,11 +665,11 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
(tdreturnidonly [<Boolean>])|
|
(tdreturnidonly [<Boolean>])|
|
||||||
(tdshare <EmailAddress> commenter|reader|writer)*|
|
(tdshare <EmailAddress> commenter|reader|writer)*|
|
||||||
(tdsheet (id:<Number>)|<String>)|
|
(tdsheet (id:<Number>)|<String>)|
|
||||||
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <String>])
|
(tdsheettimestamp [<Boolean>] [tdsheettimeformat <DateTimeFormat>])
|
||||||
(tdsheettitle <String>)|
|
(tdsheettitle <String>)|
|
||||||
(tdsubject <String>)|
|
(tdsubject <String>)|
|
||||||
([tdsheetdaysoffset <Number>] [tdsheethoursoffset <Number>])|
|
([tdsheetdaysoffset <Number>] [tdsheethoursoffset <Number>])|
|
||||||
(tdtimestamp [<Boolean>] [tdtimeformat <String>]
|
(tdtimestamp [<Boolean>] [tdtimeformat <DateTimeFormat>]
|
||||||
[tddaysoffset <Number>] [tdhoursoffset <Number>])|
|
[tddaysoffset <Number>] [tdhoursoffset <Number>])|
|
||||||
(tdtimezone <TimeZone>)|
|
(tdtimezone <TimeZone>)|
|
||||||
(tdtitle <String>)|
|
(tdtitle <String>)|
|
||||||
@@ -902,25 +904,25 @@ Specify a collection of ChromeOS devices by directly specifying them or by speci
|
|||||||
Specify a collection of Users by directly specifying them or by specifying items that will yield a list of users.
|
Specify a collection of Users by directly specifying them or by specifying items that will yield a list of users.
|
||||||
|
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users|users_ns|users_susp|users_ns_susp)|
|
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
|
||||||
(user <UserItem>)|
|
(user <UserItem>)|
|
||||||
(users <UserList>)|
|
(users <UserList>)|
|
||||||
(oauthuser)
|
(oauthuser)
|
||||||
(domains|domains_ns|domains_susp <DomainNameListList>)|
|
(domains|domains_na|domains_arch|domains_ns|domains_susp|domains_na_ns <DomainNameListList>)|
|
||||||
(group|group_ns|group_susp|group_inde <GroupItem>)|
|
(group|group_na|group_arch|group_ns|group_susp|group_na_ns|group_inde <GroupItem>)|
|
||||||
(groups|groups_ns|groups_susp|groups_inde <GroupList>)|
|
(groups|groups_na|groups_arch|groups_ns|groups_susp|groups_na_ns|groups_inde <GroupList>)|
|
||||||
(group_inde <GroupItem>)|(groups_inde <GroupList>)|
|
(group_inde <GroupItem>)|(groups_inde <GroupList>)|
|
||||||
(group_users|group_users_ns|group_users_susp <GroupList>
|
(group_users|group_users_na|group_users_arch|group_users_ns|group_users_susp|group_users_na_ns <GroupList>
|
||||||
[members] [managers] [owners]
|
[members] [managers] [owners]
|
||||||
[primarydomain] [domains <DomainNameList>] [recursive|includederivedmembership] end)|
|
[primarydomain] [domains <DomainNameList>] [recursive|includederivedmembership] end)|
|
||||||
(group_users_select <GroupList>
|
(group_users_select <GroupList>
|
||||||
[members] [managers] [owners]
|
[members] [managers] [owners]
|
||||||
[notsuspended|suspended] [notarchived|archived]
|
[notsuspended|suspended] [notarchived|archived]
|
||||||
[primarydomain] [domains <DomainNameList>] [recursive|includederivedmembership] end)|
|
[primarydomain] [domains <DomainNameList>] [recursive|includederivedmembership] end)|
|
||||||
(ou|ou_ns|ou_susp <OrgUnitItem>)|
|
(ou|ou_na|ou_arch|ou_ns|ou_susp|ou_na_ns <OrgUnitItem>)|
|
||||||
(ou_and_children|ou_and_children_ns|ou_and_children_susp <OrgUnitItem>)|
|
(ou_and_children|ou_and_children_na|ou_and_children_arch|ou_and_children_ns|ou_and_children_susp|ou_and_children_na_ns <OrgUnitItem>)|
|
||||||
(ous|ous_ns|ous_susp <OrgUnitList>)|
|
(ous|ous_na|ous_arch|ous_ns|ous_susp|ous_na_ns <OrgUnitList>)|
|
||||||
(ous_and_children|ous_and_children_ns|ous_and_children_susp <OrgUnitList>)|
|
(ous_and_children|ous_and_children_na|ous_and_children_arch|ous_and_children_ns|ous_and_children_susp|ous_and_children_na_ns <OrgUnitList>)|
|
||||||
(courseparticipants <CourseIDList>)|
|
(courseparticipants <CourseIDList>)|
|
||||||
(students <CourseIDList>)|
|
(students <CourseIDList>)|
|
||||||
(teachers <CourseIDList>)|
|
(teachers <CourseIDList>)|
|
||||||
@@ -940,20 +942,24 @@ Specify a collection of Users by directly specifying them or by specifying items
|
|||||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[endcsv|(fields <FieldNameList>)]
|
[endcsv|(fields <FieldNameList>)]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||||
[delimiter <Character>])|
|
[delimiter <Character>])|
|
||||||
(datafile
|
(datafile
|
||||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
users|
|
||||||
ous_and_children|ous_and_children_ns|ous_and_children_susp|
|
groups|groups_na|groups_arch|groups_ns|groups_susp|groups_na_ns|groups_inde|
|
||||||
courseparticipants|students|teachers
|
ous|ous_na|ous_arch|ous_ns|ous_susps|ous_na_ns|
|
||||||
|
ous_and_children|ous_and_children_na|ous_and_children_arch|ous_and_children_ns|ous_and_children_susp|ous_and_children_na_ns|
|
||||||
|
courseparticipants|students|teachers
|
||||||
((<FileName> [charset <Charset>])|
|
((<FileName> [charset <Charset>])|
|
||||||
(gdoc <UserGoogleDoc>)|
|
(gdoc <UserGoogleDoc>)|
|
||||||
(gcsdoc <StorageBucketObjectName>))
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
[delimiter <Character>])|
|
[delimiter <Character>])|
|
||||||
(csvdatafile
|
(csvdatafile
|
||||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
users|
|
||||||
ous_and_children|ous_and_children_ns|ous_and_children_susp|
|
groups|groups_na|groups_arch|groups_ns|groups_susp|groups_na_ns|groups_inde|
|
||||||
courseparticipants|students|teachers
|
ous|ous_na|ous_arch|ous_ns|ous_susps|ous_na_ns|
|
||||||
|
ous_and_children|ous_and_children_na|ous_and_children_arch|ous_and_children_ns|ous_and_children_susp|ous_and_children_na_ns|
|
||||||
|
courseparticipants|students|teachers
|
||||||
((<FileName>(:<FieldName>)+ [charset <Charset>] )|
|
((<FileName>(:<FieldName>)+ [charset <Charset>] )|
|
||||||
(gsheet(:<FieldName>)+ <UserGoogleSheet>)|
|
(gsheet(:<FieldName>)+ <UserGoogleSheet>)|
|
||||||
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
(gdoc(:<FieldName>)+ <UserGoogleDoc>)|
|
||||||
@@ -961,21 +967,23 @@ Specify a collection of Users by directly specifying them or by specifying items
|
|||||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[endcsv|(fields <FieldNameList>)]
|
[endcsv|(fields <FieldNameList>)]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||||
[delimiter <Character>])|
|
[delimiter <Character>])|
|
||||||
(csvkmd
|
(csvkmd
|
||||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
users|
|
||||||
ous_and_children|ous_and_children_ns|ous_and_children_susp|
|
groups|groups_na|groups_arch|groups_ns|groups_susp|groups_na_ns|groups_inde|
|
||||||
courseparticipants|students|teachers
|
ous|ous_na|ous_arch|ous_ns|ous_susps|ous_na_ns|
|
||||||
|
ous_and_children|ous_and_children_na|ous_and_children_arch|ous_and_children_ns|ous_and_children_susp|ous_and_children_na_ns|
|
||||||
|
courseparticipants|students|teachers
|
||||||
((<FileName>|
|
((<FileName>|
|
||||||
(gsheet <UserGoogleSheet>)|
|
(gsheet <UserGoogleSheet>)|
|
||||||
(gdoc <UserGoogleDoc>)|
|
(gdoc <UserGoogleDoc>)|
|
||||||
(gcscsv <StorageBucketObjectName>)|
|
(gcscsv <StorageBucketObjectName>)|
|
||||||
(gcsdoc <StorageBucketObjectName>))
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||||
keyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
keyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <RESubstitution>] [delimiter <Character>]
|
||||||
subkeyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
subkeyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <RESubstitution>] [delimiter <Character>]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||||
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]])
|
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]])
|
||||||
(csvdata <FieldName>(:<FieldName>*))
|
(csvdata <FieldName>(:<FieldName>*))
|
||||||
|
|
||||||
@@ -1007,23 +1015,25 @@ Specify a collection of items by directly specifying them; the item type is dete
|
|||||||
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
(gcsdoc(:<FieldName>)+ <StorageBucketObjectName>))
|
||||||
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[warnifnodata] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[endcsv|(fields <FieldNameList>)]
|
[endcsv|(fields <FieldNameList>)]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||||
[delimiter <Character>]
|
[delimiter <Character>]
|
||||||
|
|
||||||
<CSVkmdSelector> ::=
|
<CSVkmdSelector> ::=
|
||||||
csvkmd
|
csvkmd
|
||||||
users|groups|groups_ns|groups_susp|groups_inde|ous|ous_ns|ous_susp|
|
users|
|
||||||
ous_and_children|ous_and_children_ns|ous_and_children_susp|
|
groups|groups_na|groups_arch|groups_ns|groups_susp|groups_inde|
|
||||||
courseparticipants|students|teachers
|
ous|ous_na|ous_arch|ous_ns|ous_susp|
|
||||||
|
ous_and_children|ous_and_children_na|ous_and_children_arch|ous_and_children_ns|ous_and_children_susp|
|
||||||
|
courseparticipants|students|teachers
|
||||||
((<FileName>|
|
((<FileName>|
|
||||||
(gsheet <UserGoogleSheet>)|
|
(gsheet <UserGoogleSheet>)|
|
||||||
(gdoc <UserGoogleDoc>)|
|
(gdoc <UserGoogleDoc>)|
|
||||||
(gcscsv <StorageBucketObjectName>)|
|
(gcscsv <StorageBucketObjectName>)|
|
||||||
(gcsdoc <StorageBucketObjectName>))
|
(gcsdoc <StorageBucketObjectName>))
|
||||||
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
[charset <Charset>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>])
|
||||||
keyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
keyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||||
subkeyfield <FieldName> [keypattern <REMatchPattern>] [keyvalue <String>] [delimiter <Character>]
|
subkeyfield <FieldName> [keypattern <RESearchPattern>] [keyvalue <String>] [delimiter <Character>]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)*
|
(matchfield|skipfield <FieldName> <RESearchPattern>)*
|
||||||
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]]
|
[datafield <FieldName>(:<FieldName>)* [delimiter <Character>]]
|
||||||
<CSVSubkeySelector> ::= csvsubkey <FieldName>
|
<CSVSubkeySelector> ::= csvsubkey <FieldName>
|
||||||
<CSVDataSelector> ::= csvdata <FieldName>(:<FieldName>)*
|
<CSVDataSelector> ::= csvdata <FieldName>(:<FieldName>)*
|
||||||
@@ -1379,13 +1389,13 @@ gam tbatch <BatchContent> [showcmds [<Boolean>]]
|
|||||||
|
|
||||||
gam csv <CSVLoopContent> [warnifnodata]
|
gam csv <CSVLoopContent> [warnifnodata]
|
||||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)* [showcmds [<Boolean>]]
|
(matchfield|skipfield <FieldName> <RESearchPattern>)* [showcmds [<Boolean>]]
|
||||||
[skiprows <Integer>] [maxrows <Integer>]
|
[skiprows <Integer>] [maxrows <Integer>]
|
||||||
gam <GAMArgumentList>
|
gam <GAMArgumentList>
|
||||||
|
|
||||||
gam loop <CSVLoopContent> [warnifnodata]
|
gam loop <CSVLoopContent> [warnifnodata]
|
||||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>] [fields <FieldNameList>]
|
||||||
(matchfield|skipfield <FieldName> <REMatchPattern>)* [showcmds [<Boolean>]]
|
(matchfield|skipfield <FieldName> <RESearchPattern>)* [showcmds [<Boolean>]]
|
||||||
[skiprows <Integer>] [maxrows <Integer>]
|
[skiprows <Integer>] [maxrows <Integer>]
|
||||||
gam <GAMArgumentList>
|
gam <GAMArgumentList>
|
||||||
|
|
||||||
@@ -1532,8 +1542,8 @@ gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam show adminroles|roles
|
gam show adminroles|roles
|
||||||
[role <RoleItem>] [privileges]
|
[role <RoleItem>] [privileges]
|
||||||
[nosystemroles]
|
[nosystemroles]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
||||||
[condition securitygroup|nonsecuritygroup]
|
[condition securitygroup|nonsecuritygroup]
|
||||||
@@ -1582,7 +1592,7 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
|
|||||||
[limittoou <OrgUnitItem>])
|
[limittoou <OrgUnitItem>])
|
||||||
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||||
[select <UserTypeEntity>]
|
[select <UserTypeEntity>]
|
||||||
[aliasmatchpattern <REMatchPattern>]
|
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
[shownoneditable] [nogroups] [nousers]
|
[shownoneditable] [nogroups] [nousers]
|
||||||
[onerowpertarget] [delimiter <Character>]
|
[onerowpertarget] [delimiter <Character>]
|
||||||
[suppressnoaliasrows]
|
[suppressnoaliasrows]
|
||||||
@@ -1743,7 +1753,7 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
|||||||
(range <Date> <Date>)|
|
(range <Date> <Date>)|
|
||||||
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
(recurrence <RRULE, EXRULE, RDATE and EXDATE line>)|
|
||||||
(reminder <Number> email|popup))|
|
(reminder <Number> email|popup))|
|
||||||
(resource <ResourceID>)|
|
(resource <ResourceID>)|
|
||||||
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
(selectattendees [<AttendeeAttendance>] [<AttendeeStatus>] <UserTypeEntity>)|
|
||||||
(sequence <Integer>)|
|
(sequence <Integer>)|
|
||||||
(sharedproperty <PropertyKey> <PropertyValue>)|
|
(sharedproperty <PropertyKey> <PropertyValue>)|
|
||||||
@@ -4470,8 +4480,10 @@ gam update orgs|ous <OrgUnitEntity> sync <CrOSTypeEntity> [removetoou <OrgUnitIt
|
|||||||
gam update orgs|ous <OrgUnitEntity> sync <UserTypeEntity> [removetoou <OrgUnitItem>]
|
gam update orgs|ous <OrgUnitEntity> sync <UserTypeEntity> [removetoou <OrgUnitItem>]
|
||||||
gam delete orgs|ous <OrgUnitEntity>
|
gam delete orgs|ous <OrgUnitEntity>
|
||||||
|
|
||||||
gam info org|ou <OrgUnitItem> [nousers|notsuspended|suspended] [children|child]
|
gam info org|ou <OrgUnitItem>
|
||||||
gam info orgs|ous <OrgUnitEntity> [nousers|notsuspended|suspended] [children|child]
|
[nousers | ([notarchived|archived] [notsuspended|suspended])] [children|child]
|
||||||
|
gam info orgs|ous <OrgUnitEntity>
|
||||||
|
[nousers | ([notarchived|archived] [notsuspended|suspended])] [children|child]
|
||||||
|
|
||||||
<OrgUnitSelector> ::=
|
<OrgUnitSelector> ::=
|
||||||
cros_ou | cros_ou_and_children|
|
cros_ou | cros_ou_and_children|
|
||||||
@@ -5856,7 +5868,7 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -5873,7 +5885,7 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
|||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -5888,7 +5900,7 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
|||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -5909,7 +5921,7 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
([domain|domains <DomainNameEntity>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||||
[limittoou <OrgUnitItem>] [deleted_only|only_deleted])
|
[limittoou <OrgUnitItem>] [deleted_only|only_deleted])
|
||||||
[formatjson [quotechar <Character>]] [countsonly|countonly]
|
[formatjson [quotechar <Character>]] [countsonly|countonly]
|
||||||
[issuspended <Boolean>]
|
[issuspended <Boolean>] [isarchived <Boolean>]
|
||||||
|
|
||||||
Print user domain counts for specified users.
|
Print user domain counts for specified users.
|
||||||
|
|
||||||
@@ -6688,7 +6700,7 @@ gam <UserTypeEntity> create|add drivefile
|
|||||||
[(localfile <FileName>|-)|(url <URL>)]
|
[(localfile <FileName>|-)|(url <URL>)]
|
||||||
[(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
[(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||||
[stripnameprefix <String>] [noduplicate]
|
[stripnameprefix <String>] [noduplicate]
|
||||||
[timestamp [<Boolean>]] [timeformat <String>]
|
[timestamp [<Boolean>]] [timeformat <DateTimeFormat>]
|
||||||
<DriveFileCreateAttribute>*
|
<DriveFileCreateAttribute>*
|
||||||
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> currenttime|<String>)*) |
|
[(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> currenttime|<String>)*) |
|
||||||
(returnidonly|returnlinkonly|returneditlinkonly|showdetails)]
|
(returnidonly|returnlinkonly|returneditlinkonly|showdetails)]
|
||||||
@@ -6709,7 +6721,7 @@ gam <UserTypeEntity> update drivefile <DriveFileEntity> [copy] [returnidonly|ret
|
|||||||
[(localfile <FileName>|-)|(url <URL>)]
|
[(localfile <FileName>|-)|(url <URL>)]
|
||||||
[retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
[retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||||
[stripnameprefix <String>]
|
[stripnameprefix <String>]
|
||||||
[timestamp [<Boolean>]] [timeformat <String>]
|
[timestamp [<Boolean>]] [timeformat <DateTimeFormat>]
|
||||||
<DriveFileUpdateAttribute>*
|
<DriveFileUpdateAttribute>*
|
||||||
[(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
[(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
||||||
[charset <Charset>] [columndelimiter <Character>]
|
[charset <Charset>] [columndelimiter <Character>]
|
||||||
@@ -8591,7 +8603,7 @@ gam <UserTypeEntity> print shareddriveorganizers [todrive <ToDriveAttribute>*]
|
|||||||
[shownorganizerdrives [false|true|only]]
|
[shownorganizerdrives [false|true|only]]
|
||||||
[includefileorganizers [<Boolean>]]
|
[includefileorganizers [<Boolean>]]
|
||||||
[delimiter <Character>]
|
[delimiter <Character>]
|
||||||
|
|
||||||
# Users - Force Signout and Turn Off 2-Step Verification
|
# Users - Force Signout and Turn Off 2-Step Verification
|
||||||
|
|
||||||
gam <UserTypeEntity> signout
|
gam <UserTypeEntity> signout
|
||||||
|
|||||||
@@ -1,3 +1,20 @@
|
|||||||
|
7.22.00
|
||||||
|
|
||||||
|
Expanded `<UserTypeEntity>` to allow specification of non-archived/archived users.
|
||||||
|
* See [Collections of Users](Collections-of-Users)
|
||||||
|
|
||||||
|
These commands have been updated:
|
||||||
|
* `gam print aliases`
|
||||||
|
* `gam update groups`
|
||||||
|
* `gam info orgs`
|
||||||
|
* `gam print orgs`
|
||||||
|
* `gam print users`
|
||||||
|
|
||||||
|
Added `datetime <DateTimeFormat>` command that can be embedded in Gam batch files. The current time is formatted with `<DateTimeFormat>`
|
||||||
|
and subsequent lines in `<BatchContent>` will have `%datetime%` replaced with the formatted time value.
|
||||||
|
|
||||||
|
See: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
|
||||||
|
|
||||||
7.21.03
|
7.21.03
|
||||||
|
|
||||||
Added option `notifyrecoveryemail` to `gam create user` and `gam <UserTypeEntity> update user password <String>`
|
Added option `notifyrecoveryemail` to `gam create user` and `gam <UserTypeEntity> update user password <String>`
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.21.03'
|
__version__ = '7.22.00'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -969,14 +969,14 @@ SUSPENDED_CHOICE_MAP = {'notsuspended': False, 'suspended': True}
|
|||||||
def _getIsSuspended(myarg):
|
def _getIsSuspended(myarg):
|
||||||
if myarg in SUSPENDED_CHOICE_MAP:
|
if myarg in SUSPENDED_CHOICE_MAP:
|
||||||
return SUSPENDED_CHOICE_MAP[myarg]
|
return SUSPENDED_CHOICE_MAP[myarg]
|
||||||
return getBoolean()
|
return getBoolean() #issuspended
|
||||||
|
|
||||||
ARCHIVED_ARGUMENTS = {'notarchived', 'archived', 'isarchived'}
|
ARCHIVED_ARGUMENTS = {'notarchived', 'archived', 'isarchived'}
|
||||||
ARCHIVED_CHOICE_MAP = {'notarchived': False, 'archived': True}
|
ARCHIVED_CHOICE_MAP = {'notarchived': False, 'archived': True}
|
||||||
def _getIsArchived(myarg):
|
def _getIsArchived(myarg):
|
||||||
if myarg in ARCHIVED_CHOICE_MAP:
|
if myarg in ARCHIVED_CHOICE_MAP:
|
||||||
return ARCHIVED_CHOICE_MAP[myarg]
|
return ARCHIVED_CHOICE_MAP[myarg]
|
||||||
return getBoolean()
|
return getBoolean() #isarchived
|
||||||
|
|
||||||
def _getOptionalIsSuspendedIsArchived():
|
def _getOptionalIsSuspendedIsArchived():
|
||||||
isSuspended = isArchived = None
|
isSuspended = isArchived = None
|
||||||
@@ -1549,10 +1549,12 @@ def getOrderBySortOrder(choiceMap, defaultSortOrderChoice='ASCENDING', mapSortOr
|
|||||||
return (getChoice(choiceMap, mapChoice=True),
|
return (getChoice(choiceMap, mapChoice=True),
|
||||||
getChoice(SORTORDER_CHOICE_MAP, defaultChoice=defaultSortOrderChoice, mapChoice=mapSortOrderChoice))
|
getChoice(SORTORDER_CHOICE_MAP, defaultChoice=defaultSortOrderChoice, mapChoice=mapSortOrderChoice))
|
||||||
|
|
||||||
def orgUnitPathQuery(path, isSuspended):
|
def orgUnitPathQuery(path, isSuspended, isArchived):
|
||||||
query = "orgUnitPath='{0}'".format(path.replace("'", "\\'")) if path != '/' else ''
|
query = "orgUnitPath='{0}'".format(path.replace("'", "\\'")) if path != '/' else ''
|
||||||
if isSuspended is not None:
|
if isSuspended is not None:
|
||||||
query += f' isSuspended={isSuspended}'
|
query += f' isSuspended={isSuspended}'
|
||||||
|
if isArchived is not None:
|
||||||
|
query += f' isArchived={isArchived}'
|
||||||
return query
|
return query
|
||||||
|
|
||||||
def makeOrgUnitPathAbsolute(path):
|
def makeOrgUnitPathAbsolute(path):
|
||||||
@@ -6247,63 +6249,77 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
_showInvalidEntity(Ent.USER, user)
|
_showInvalidEntity(Ent.USER, user)
|
||||||
if GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY]:
|
if GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY]:
|
||||||
return entityList
|
return entityList
|
||||||
elif entityType in {Cmd.ENTITY_ALL_USERS, Cmd.ENTITY_ALL_USERS_NS, Cmd.ENTITY_ALL_USERS_NS_SUSP, Cmd.ENTITY_ALL_USERS_SUSP}:
|
elif entityType in Cmd.ALL_USER_ENTITY_TYPES:
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
if entityType == Cmd.ENTITY_ALL_USERS and isSuspended is not None:
|
if entityType == Cmd.ENTITY_ALL_USERS and ((isSuspended is not None) or (isArchived is not None)):
|
||||||
query = f'isSuspended={isSuspended}'
|
if isSuspended is not None:
|
||||||
|
query = f'isSuspended={isSuspended}'
|
||||||
|
if isArchived is not None:
|
||||||
|
query += f' isArchived={isArchived}'
|
||||||
|
else:
|
||||||
|
query = f'isArchived={isArchived}'
|
||||||
else:
|
else:
|
||||||
query = Cmd.ALL_USERS_QUERY_MAP[entityType]
|
query = Cmd.ALL_USERS_QUERY_MAP[entityType]
|
||||||
printGettingAllAccountEntities(Ent.USER)
|
printGettingAllAccountEntities(Ent.USER, query=query)
|
||||||
try:
|
try:
|
||||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
pageMessage=getPageMessage(),
|
pageMessage=getPageMessage(),
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID],
|
customer=GC.Values[GC.CUSTOMER_ID], query=query, orderBy='email',
|
||||||
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
fields='nextPageToken,users(primaryEmail)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
accessErrorExit(cd)
|
accessErrorExit(cd)
|
||||||
entityList = [user['primaryEmail'] for user in result if isArchived is None or isArchived == user['archived']]
|
entityList = [user['primaryEmail'] for user in result]
|
||||||
printGotAccountEntities(len(entityList))
|
elif entityType == Cmd.ENTITY_ALL_USERS_ARCH_OR_SUSP:
|
||||||
elif entityType in {Cmd.ENTITY_DOMAINS, Cmd.ENTITY_DOMAINS_NS, Cmd.ENTITY_DOMAINS_SUSP}:
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
if entityType == Cmd.ENTITY_DOMAINS_NS:
|
for query in ['isSuspended=True', 'isArchived=True']:
|
||||||
query = 'isSuspended=False'
|
printGettingAllAccountEntities(Ent.USER, query)
|
||||||
elif entityType == Cmd.ENTITY_DOMAINS_SUSP:
|
try:
|
||||||
query = 'isSuspended=True'
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
elif isSuspended is not None:
|
pageMessage=getPageMessage(),
|
||||||
query = f'isSuspended={isSuspended}'
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
|
customer=GC.Values[GC.CUSTOMER_ID], query=query, orderBy='email',
|
||||||
|
fields='nextPageToken,users(primaryEmail)',
|
||||||
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
|
accessErrorExit(cd)
|
||||||
|
entitySet |= {user['primaryEmail'] for user in result}
|
||||||
|
entityList = sorted(list(entitySet))
|
||||||
|
elif entityType in Cmd.DOMAIN_ENTITY_TYPES:
|
||||||
|
if entityType == Cmd.ENTITY_DOMAINS and ((isSuspended is not None) or (isArchived is not None)):
|
||||||
|
if isSuspended is not None:
|
||||||
|
query = f'isSuspended={isSuspended}'
|
||||||
|
if isArchived is not None:
|
||||||
|
query += f' isArchived={isArchived}'
|
||||||
|
else:
|
||||||
|
query = f'isArchived={isArchived}'
|
||||||
else:
|
else:
|
||||||
query = None
|
query = Cmd.DOMAINS_QUERY_MAP[entityType]
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
domains = convertEntityToList(entity)
|
domains = convertEntityToList(entity)
|
||||||
for domain in domains:
|
for domain in domains:
|
||||||
printGettingAllEntityItemsForWhom(Ent.USER, domain, entityType=Ent.DOMAIN)
|
printGettingAllEntityItemsForWhom(Ent.USER, domain, query=query, entityType=Ent.DOMAIN)
|
||||||
try:
|
try:
|
||||||
result = callGAPIpages(cd.users(), 'list', 'users',
|
result = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
pageMessage=getPageMessageForWhom(),
|
pageMessage=getPageMessageForWhom(),
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.DOMAIN_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
domain=domain,
|
domain=domain, query=query, orderBy='email',
|
||||||
query=query, orderBy='email', fields='nextPageToken,users(primaryEmail,archived)',
|
fields='nextPageToken,users(primaryEmail)',
|
||||||
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.forbidden):
|
except (GAPI.badRequest, GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.forbidden):
|
||||||
checkEntityDNEorAccessErrorExit(cd, Ent.DOMAIN, domain)
|
checkEntityDNEorAccessErrorExit(cd, Ent.DOMAIN, domain)
|
||||||
_incrEntityDoesNotExist(Ent.DOMAIN)
|
_incrEntityDoesNotExist(Ent.DOMAIN)
|
||||||
continue
|
continue
|
||||||
entityList = [user['primaryEmail'] for user in result if isArchived is None or isArchived == user['archived']]
|
entityList.extend([user['primaryEmail'] for user in result])
|
||||||
printGotAccountEntities(len(entityList))
|
elif entityType in Cmd.GROUP_ENTITY_TYPES or entityType in Cmd.GROUPS_ENTITY_TYPES:
|
||||||
elif entityType in {Cmd.ENTITY_GROUP, Cmd.ENTITY_GROUPS,
|
isArchived, isSuspended = Cmd.GROUPS_QUERY_MAP.get(entityType, (isArchived, isSuspended))
|
||||||
Cmd.ENTITY_GROUP_NS, Cmd.ENTITY_GROUPS_NS,
|
|
||||||
Cmd.ENTITY_GROUP_SUSP, Cmd.ENTITY_GROUPS_SUSP,
|
|
||||||
Cmd.ENTITY_GROUP_INDE, Cmd.ENTITY_GROUPS_INDE}:
|
|
||||||
if entityType in {Cmd.ENTITY_GROUP_NS, Cmd.ENTITY_GROUPS_NS}:
|
|
||||||
isSuspended = False
|
|
||||||
elif entityType in {Cmd.ENTITY_GROUP_SUSP, Cmd.ENTITY_GROUPS_SUSP}:
|
|
||||||
isSuspended = True
|
|
||||||
includeDerivedMembership = entityType in {Cmd.ENTITY_GROUP_INDE, Cmd.ENTITY_GROUPS_INDE}
|
includeDerivedMembership = entityType in {Cmd.ENTITY_GROUP_INDE, Cmd.ENTITY_GROUPS_INDE}
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
groups = convertEntityToList(entity, nonListEntityType=entityType in {Cmd.ENTITY_GROUP, Cmd.ENTITY_GROUP_NS, Cmd.ENTITY_GROUP_SUSP, Cmd.ENTITY_GROUP_INDE})
|
groups = convertEntityToList(entity, nonListEntityType=entityType in Cmd.GROUP_ENTITY_TYPES)
|
||||||
for group in groups:
|
for group in groups:
|
||||||
if validateEmailAddressOrUID(group, checkPeople=False):
|
if validateEmailAddressOrUID(group, checkPeople=False):
|
||||||
group = normalizeEmailAddressOrUID(group)
|
group = normalizeEmailAddressOrUID(group)
|
||||||
@@ -6329,11 +6345,8 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
entityList.append(email)
|
entityList.append(email)
|
||||||
else:
|
else:
|
||||||
_showInvalidEntity(Ent.GROUP, group)
|
_showInvalidEntity(Ent.GROUP, group)
|
||||||
elif entityType in {Cmd.ENTITY_GROUP_USERS, Cmd.ENTITY_GROUP_USERS_NS, Cmd.ENTITY_GROUP_USERS_SUSP, Cmd.ENTITY_GROUP_USERS_SELECT}:
|
elif entityType in Cmd.GROUP_USERS_ENTITY_TYPES:
|
||||||
if entityType == Cmd.ENTITY_GROUP_USERS_NS:
|
isArchived, isSuspended = Cmd.GROUP_USERS_QUERY_MAP.get(entityType, (isArchived, isSuspended))
|
||||||
isSuspended = False
|
|
||||||
elif entityType == Cmd.ENTITY_GROUP_USERS_SUSP:
|
|
||||||
isSuspended = True
|
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
groups = convertEntityToList(entity)
|
groups = convertEntityToList(entity)
|
||||||
includeDerivedMembership = False
|
includeDerivedMembership = False
|
||||||
@@ -6424,21 +6437,13 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
_addCIGroupUsersToUsers(name, groupEmail, recursive)
|
_addCIGroupUsersToUsers(name, groupEmail, recursive)
|
||||||
else:
|
else:
|
||||||
_showInvalidEntity(Ent.GROUP, group)
|
_showInvalidEntity(Ent.GROUP, group)
|
||||||
elif entityType in {Cmd.ENTITY_OU, Cmd.ENTITY_OUS, Cmd.ENTITY_OU_AND_CHILDREN, Cmd.ENTITY_OUS_AND_CHILDREN,
|
elif entityType in Cmd.OU_ENTITY_TYPES or entityType in Cmd.OUS_ENTITY_TYPES:
|
||||||
Cmd.ENTITY_OU_NS, Cmd.ENTITY_OUS_NS, Cmd.ENTITY_OU_AND_CHILDREN_NS, Cmd.ENTITY_OUS_AND_CHILDREN_NS,
|
isArchived, isSuspended = Cmd.OU_QUERY_MAP.get(entityType, (isArchived, isSuspended))
|
||||||
Cmd.ENTITY_OU_SUSP, Cmd.ENTITY_OUS_SUSP, Cmd.ENTITY_OU_AND_CHILDREN_SUSP, Cmd.ENTITY_OUS_AND_CHILDREN_SUSP}:
|
|
||||||
if entityType in {Cmd.ENTITY_OU_NS, Cmd.ENTITY_OUS_NS, Cmd.ENTITY_OU_AND_CHILDREN_NS, Cmd.ENTITY_OUS_AND_CHILDREN_NS}:
|
|
||||||
isSuspended = False
|
|
||||||
elif entityType in {Cmd.ENTITY_OU_SUSP, Cmd.ENTITY_OUS_SUSP, Cmd.ENTITY_OU_AND_CHILDREN_SUSP, Cmd.ENTITY_OUS_AND_CHILDREN_SUSP}:
|
|
||||||
isSuspended = True
|
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
ous = convertEntityToList(entity, shlexSplit=True, nonListEntityType=entityType in {Cmd.ENTITY_OU, Cmd.ENTITY_OU_AND_CHILDREN,
|
ous = convertEntityToList(entity, shlexSplit=True, nonListEntityType=entityType in Cmd.OU_ENTITY_TYPES)
|
||||||
Cmd.ENTITY_OU_NS, Cmd.ENTITY_OU_AND_CHILDREN_NS,
|
directlyInOU = entityType in Cmd.OU_DIRECT_ENTITY_TYPES
|
||||||
Cmd.ENTITY_OU_SUSP, Cmd.ENTITY_OU_AND_CHILDREN_SUSP})
|
|
||||||
directlyInOU = entityType in {Cmd.ENTITY_OU, Cmd.ENTITY_OUS, Cmd.ENTITY_OU_NS, Cmd.ENTITY_OUS_NS, Cmd.ENTITY_OU_SUSP, Cmd.ENTITY_OUS_SUSP}
|
|
||||||
qualifier = Msg.DIRECTLY_IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT)) if directlyInOU else Msg.IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT))
|
qualifier = Msg.DIRECTLY_IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT)) if directlyInOU else Msg.IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT))
|
||||||
fields = 'nextPageToken,users(primaryEmail,orgUnitPath,archived)' if directlyInOU else 'nextPageToken,users(primaryEmail,archived)'
|
fields = 'nextPageToken,users(primaryEmail,orgUnitPath)' if directlyInOU else 'nextPageToken,users(primaryEmail)'
|
||||||
prevLen = 0
|
|
||||||
for ou in ous:
|
for ou in ous:
|
||||||
ou = makeOrgUnitPathAbsolute(ou)
|
ou = makeOrgUnitPathAbsolute(ou)
|
||||||
if ou.startswith('id:'):
|
if ou.startswith('id:'):
|
||||||
@@ -6463,22 +6468,17 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(ou, isSuspended), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(ou, isSuspended, isArchived), orderBy='email',
|
||||||
fields=fields, maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields=fields, maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
if directlyInOU:
|
if directlyInOU:
|
||||||
for user in users:
|
for user in users:
|
||||||
if ouLower == user.get('orgUnitPath', '').lower() and (isArchived is None or isArchived == user['archived']):
|
if ouLower == user.get('orgUnitPath', '').lower():
|
||||||
usersInOU += 1
|
usersInOU += 1
|
||||||
entityList.append(user['primaryEmail'])
|
entityList.append(user['primaryEmail'])
|
||||||
elif isArchived is None:
|
else:
|
||||||
entityList.extend([user['primaryEmail'] for user in users])
|
entityList.extend([user['primaryEmail'] for user in users])
|
||||||
usersInOU += len(users)
|
usersInOU += len(users)
|
||||||
else:
|
|
||||||
for user in users:
|
|
||||||
if isArchived == user['archived']:
|
|
||||||
usersInOU += 1
|
|
||||||
entityList.append(user['primaryEmail'])
|
|
||||||
setGettingAllEntityItemsForWhom(Ent.USER, ou, qualifier=qualifier)
|
setGettingAllEntityItemsForWhom(Ent.USER, ou, qualifier=qualifier)
|
||||||
printGotEntityItemsForWhom(usersInOU)
|
printGotEntityItemsForWhom(usersInOU)
|
||||||
except (GAPI.invalidInput, GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.backendError, GAPI.badRequest,
|
except (GAPI.invalidInput, GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.backendError, GAPI.badRequest,
|
||||||
@@ -6488,7 +6488,6 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
elif entityType in {Cmd.ENTITY_QUERY, Cmd.ENTITY_QUERIES}:
|
elif entityType in {Cmd.ENTITY_QUERY, Cmd.ENTITY_QUERIES}:
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
queries = convertEntityToList(entity, shlexSplit=True, nonListEntityType=entityType == Cmd.ENTITY_QUERY)
|
queries = convertEntityToList(entity, shlexSplit=True, nonListEntityType=entityType == Cmd.ENTITY_QUERY)
|
||||||
prevLen = 0
|
|
||||||
for query in queries:
|
for query in queries:
|
||||||
printGettingAllAccountEntities(Ent.USER, query)
|
printGettingAllAccountEntities(Ent.USER, query)
|
||||||
try:
|
try:
|
||||||
@@ -6512,9 +6511,6 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
email not in entitySet):
|
email not in entitySet):
|
||||||
entitySet.add(email)
|
entitySet.add(email)
|
||||||
entityList.append(email)
|
entityList.append(email)
|
||||||
totalLen = len(entityList)
|
|
||||||
printGotAccountEntities(totalLen-prevLen)
|
|
||||||
prevLen = totalLen
|
|
||||||
elif entityType == Cmd.ENTITY_LICENSES:
|
elif entityType == Cmd.ENTITY_LICENSES:
|
||||||
skusList = []
|
skusList = []
|
||||||
for item in entity.split(','):
|
for item in entity.split(','):
|
||||||
@@ -6573,8 +6569,7 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
ClientAPIAccessDeniedExit(str(e))
|
ClientAPIAccessDeniedExit(str(e))
|
||||||
elif entityType == Cmd.ENTITY_CROS:
|
elif entityType == Cmd.ENTITY_CROS:
|
||||||
buildGAPIObject(API.DIRECTORY)
|
buildGAPIObject(API.DIRECTORY)
|
||||||
result = convertEntityToList(entity)
|
for deviceId in convertEntityToList(entity):
|
||||||
for deviceId in result:
|
|
||||||
if deviceId not in entitySet:
|
if deviceId not in entitySet:
|
||||||
entitySet.add(deviceId)
|
entitySet.add(deviceId)
|
||||||
entityList.append(deviceId)
|
entityList.append(deviceId)
|
||||||
@@ -6598,7 +6593,6 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
nonListEntityType=entityType == Cmd.ENTITY_CROS_QUERY)
|
nonListEntityType=entityType == Cmd.ENTITY_CROS_QUERY)
|
||||||
if entityType == Cmd.ENTITY_CROS_SN:
|
if entityType == Cmd.ENTITY_CROS_SN:
|
||||||
queries = [f'id:{query}' for query in queries]
|
queries = [f'id:{query}' for query in queries]
|
||||||
prevLen = 0
|
|
||||||
for query in queries:
|
for query in queries:
|
||||||
printGettingAllAccountEntities(Ent.CROS_DEVICE, query)
|
printGettingAllAccountEntities(Ent.CROS_DEVICE, query)
|
||||||
try:
|
try:
|
||||||
@@ -6619,25 +6613,15 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
if deviceId not in entitySet:
|
if deviceId not in entitySet:
|
||||||
entitySet.add(deviceId)
|
entitySet.add(deviceId)
|
||||||
entityList.append(deviceId)
|
entityList.append(deviceId)
|
||||||
totalLen = len(entityList)
|
elif entityType in Cmd.CROS_OU_ENTITY_TYPES or entityType in Cmd.CROS_OUS_ENTITY_TYPES:
|
||||||
printGotAccountEntities(totalLen-prevLen)
|
|
||||||
prevLen = totalLen
|
|
||||||
elif entityType in {Cmd.ENTITY_CROS_OU, Cmd.ENTITY_CROS_OU_AND_CHILDREN, Cmd.ENTITY_CROS_OUS, Cmd.ENTITY_CROS_OUS_AND_CHILDREN,
|
|
||||||
Cmd.ENTITY_CROS_OU_QUERY, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERY, Cmd.ENTITY_CROS_OUS_QUERY, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
|
|
||||||
Cmd.ENTITY_CROS_OU_QUERIES, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERIES, Cmd.ENTITY_CROS_OUS_QUERIES, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERIES}:
|
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
ous = convertEntityToList(entity, shlexSplit=True,
|
ous = convertEntityToList(entity, shlexSplit=True, nonListEntityType=entityType in Cmd.CROS_OU_ENTITY_TYPES)
|
||||||
nonListEntityType=entityType in {Cmd.ENTITY_CROS_OU, Cmd.ENTITY_CROS_OU_AND_CHILDREN,
|
|
||||||
Cmd.ENTITY_CROS_OU_QUERY, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERY,
|
|
||||||
Cmd.ENTITY_CROS_OU_QUERIES, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERIES})
|
|
||||||
numOus = len(ous)
|
numOus = len(ous)
|
||||||
includeChildOrgunits = entityType in {Cmd.ENTITY_CROS_OU_AND_CHILDREN, Cmd.ENTITY_CROS_OUS_AND_CHILDREN,
|
includeChildOrgunits = entityType in Cmd.CROS_OU_CHILDREN_ENTITY_TYPES
|
||||||
Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERY, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
|
|
||||||
Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERIES, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERIES}
|
|
||||||
allQualifier = Msg.DIRECTLY_IN_THE.format(Ent.Choose(Ent.ORGANIZATIONAL_UNIT, numOus)) if not includeChildOrgunits else Msg.IN_THE.format(Ent.Choose(Ent.ORGANIZATIONAL_UNIT, numOus))
|
allQualifier = Msg.DIRECTLY_IN_THE.format(Ent.Choose(Ent.ORGANIZATIONAL_UNIT, numOus)) if not includeChildOrgunits else Msg.IN_THE.format(Ent.Choose(Ent.ORGANIZATIONAL_UNIT, numOus))
|
||||||
if entityType in {Cmd.ENTITY_CROS_OU_QUERY, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERY, Cmd.ENTITY_CROS_OUS_QUERY, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERY}:
|
if entityType in Cmd.CROS_OU_QUERY_ENTITY_TYPES:
|
||||||
queries = getQueries('query')
|
queries = getQueries('query')
|
||||||
elif entityType in {Cmd.ENTITY_CROS_OU_QUERIES, Cmd.ENTITY_CROS_OU_AND_CHILDREN_QUERIES, Cmd.ENTITY_CROS_OUS_QUERIES, Cmd.ENTITY_CROS_OUS_AND_CHILDREN_QUERIES}:
|
elif entityType in Cmd.CROS_OU_QUERIES_ENTITY_TYPES:
|
||||||
queries = getQueries('queries')
|
queries = getQueries('queries')
|
||||||
else:
|
else:
|
||||||
queries = [None]
|
queries = [None]
|
||||||
@@ -6710,7 +6694,6 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
customerId = _getCustomerIdNoC()
|
customerId = _getCustomerIdNoC()
|
||||||
queries = convertEntityToList(entity, shlexSplit=entityType == Cmd.ENTITY_BROWSER_QUERIES,
|
queries = convertEntityToList(entity, shlexSplit=entityType == Cmd.ENTITY_BROWSER_QUERIES,
|
||||||
nonListEntityType=entityType == Cmd.ENTITY_BROWSER_QUERY)
|
nonListEntityType=entityType == Cmd.ENTITY_BROWSER_QUERY)
|
||||||
prevLen = 0
|
|
||||||
for query in queries:
|
for query in queries:
|
||||||
printGettingAllAccountEntities(Ent.CHROME_BROWSER, query)
|
printGettingAllAccountEntities(Ent.CHROME_BROWSER, query)
|
||||||
try:
|
try:
|
||||||
@@ -6730,9 +6713,6 @@ def getItemsToModify(entityType, entity, memberRoles=None, isSuspended=None, isA
|
|||||||
if deviceId not in entitySet:
|
if deviceId not in entitySet:
|
||||||
entitySet.add(deviceId)
|
entitySet.add(deviceId)
|
||||||
entityList.append(deviceId)
|
entityList.append(deviceId)
|
||||||
totalLen = len(entityList)
|
|
||||||
printGotAccountEntities(totalLen-prevLen)
|
|
||||||
prevLen = totalLen
|
|
||||||
else:
|
else:
|
||||||
systemErrorExit(UNKNOWN_ERROR_RC, 'getItemsToModify coding error')
|
systemErrorExit(UNKNOWN_ERROR_RC, 'getItemsToModify coding error')
|
||||||
for errorType in [ENTITY_ERROR_DNE, ENTITY_ERROR_INVALID]:
|
for errorType in [ENTITY_ERROR_DNE, ENTITY_ERROR_INVALID]:
|
||||||
@@ -7045,10 +7025,7 @@ def getEntityToModify(defaultEntityType=None, browserAllowed=False, crosAllowed=
|
|||||||
choices += Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES
|
choices += Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES
|
||||||
entityType = mapEntityType(getChoice(choices), typeMap)
|
entityType = mapEntityType(getChoice(choices), typeMap)
|
||||||
return (Cmd.ENTITY_USERS if entityType not in Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES else Cmd.ENTITY_CROS,
|
return (Cmd.ENTITY_USERS if entityType not in Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES else Cmd.ENTITY_CROS,
|
||||||
getItemsToModify(entityType, getEntitiesFromFile(shlexSplit=entityType in [Cmd.ENTITY_OUS, Cmd.ENTITY_OUS_AND_CHILDREN,
|
getItemsToModify(entityType, getEntitiesFromFile(shlexSplit=entityType in Cmd.OUS_ENTITY_TYPES | {Cmd.ENTITY_CROS_OUS, Cmd.ENTITY_CROS_OUS_AND_CHILDREN})))
|
||||||
Cmd.ENTITY_OUS_NS, Cmd.ENTITY_OUS_AND_CHILDREN_NS,
|
|
||||||
Cmd.ENTITY_OUS_SUSP, Cmd.ENTITY_OUS_AND_CHILDREN_SUSP,
|
|
||||||
Cmd.ENTITY_CROS_OUS, Cmd.ENTITY_CROS_OUS_AND_CHILDREN])))
|
|
||||||
if entitySelector == Cmd.ENTITY_SELECTOR_CSVDATAFILE:
|
if entitySelector == Cmd.ENTITY_SELECTOR_CSVDATAFILE:
|
||||||
if userAllowed:
|
if userAllowed:
|
||||||
choices += Cmd.USER_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY] else [Cmd.ENTITY_USERS]
|
choices += Cmd.USER_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY] else [Cmd.ENTITY_USERS]
|
||||||
@@ -7056,10 +7033,7 @@ def getEntityToModify(defaultEntityType=None, browserAllowed=False, crosAllowed=
|
|||||||
choices += Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES
|
choices += Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES
|
||||||
entityType = mapEntityType(getChoice(choices), typeMap)
|
entityType = mapEntityType(getChoice(choices), typeMap)
|
||||||
return (Cmd.ENTITY_USERS if entityType not in Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES else Cmd.ENTITY_CROS,
|
return (Cmd.ENTITY_USERS if entityType not in Cmd.CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES else Cmd.ENTITY_CROS,
|
||||||
getItemsToModify(entityType, getEntitiesFromCSVFile(shlexSplit=entityType in [Cmd.ENTITY_OUS, Cmd.ENTITY_OUS_AND_CHILDREN,
|
getItemsToModify(entityType, getEntitiesFromCSVFile(shlexSplit=entityType in Cmd.OUS_ENTITY_TYPES | {Cmd.ENTITY_CROS_OUS, Cmd.ENTITY_CROS_OUS_AND_CHILDREN})))
|
||||||
Cmd.ENTITY_OUS_NS, Cmd.ENTITY_OUS_AND_CHILDREN_NS,
|
|
||||||
Cmd.ENTITY_OUS_SUSP, Cmd.ENTITY_OUS_AND_CHILDREN_SUSP,
|
|
||||||
Cmd.ENTITY_CROS_OUS, Cmd.ENTITY_CROS_OUS_AND_CHILDREN])))
|
|
||||||
if entitySelector == Cmd.ENTITY_SELECTOR_CSVKMD:
|
if entitySelector == Cmd.ENTITY_SELECTOR_CSVKMD:
|
||||||
if userAllowed:
|
if userAllowed:
|
||||||
choices += Cmd.USER_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY] else [Cmd.ENTITY_USERS]
|
choices += Cmd.USER_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY] else [Cmd.ENTITY_USERS]
|
||||||
@@ -7102,10 +7076,7 @@ def getEntityToModify(defaultEntityType=None, browserAllowed=False, crosAllowed=
|
|||||||
if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY]:
|
if not GC.Values[GC.USER_SERVICE_ACCOUNT_ACCESS_ONLY]:
|
||||||
buildGAPIObject(API.DIRECTORY)
|
buildGAPIObject(API.DIRECTORY)
|
||||||
if entityClass == Cmd.ENTITY_USERS:
|
if entityClass == Cmd.ENTITY_USERS:
|
||||||
if entityType in [Cmd.ENTITY_GROUP_USERS,
|
if entityType in Cmd.GROUP_USERS_ENTITY_TYPES | {Cmd.ENTITY_CIGROUP_USERS}:
|
||||||
Cmd.ENTITY_GROUP_USERS_NS, Cmd.ENTITY_GROUP_USERS_SUSP,
|
|
||||||
Cmd.ENTITY_GROUP_USERS_SELECT,
|
|
||||||
Cmd.ENTITY_CIGROUP_USERS]:
|
|
||||||
# Skip over sub-arguments
|
# Skip over sub-arguments
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
@@ -10149,8 +10120,8 @@ def threadBatchWorker(showCmds=False, numItems=0):
|
|||||||
batchWriteStderr(f'{currentISOformatTimeStamp()},{pid}/{numItems},Error,{str(e)},{logCmd}\n')
|
batchWriteStderr(f'{currentISOformatTimeStamp()},{pid}/{numItems},Error,{str(e)},{logCmd}\n')
|
||||||
GM.Globals[GM.TBATCH_QUEUE].task_done()
|
GM.Globals[GM.TBATCH_QUEUE].task_done()
|
||||||
|
|
||||||
BATCH_COMMANDS = [Cmd.GAM_CMD, Cmd.COMMIT_BATCH_CMD, Cmd.PRINT_CMD, Cmd.SLEEP_CMD]
|
BATCH_COMMANDS = [Cmd.GAM_CMD, Cmd.COMMIT_BATCH_CMD, Cmd.PRINT_CMD, Cmd.SLEEP_CMD, Cmd.DATETIME_CMD, Cmd.SET_CMD, Cmd.CLEAR_CMD]
|
||||||
TBATCH_COMMANDS = [Cmd.GAM_CMD, Cmd.COMMIT_BATCH_CMD, Cmd.EXECUTE_CMD, Cmd.PRINT_CMD, Cmd.SLEEP_CMD]
|
TBATCH_COMMANDS = [Cmd.GAM_CMD, Cmd.COMMIT_BATCH_CMD, Cmd.EXECUTE_CMD, Cmd.PRINT_CMD, Cmd.SLEEP_CMD, Cmd.DATETIME_CMD, Cmd.SET_CMD, Cmd.CLEAR_CMD]
|
||||||
|
|
||||||
def ThreadBatchGAMCommands(items, showCmds):
|
def ThreadBatchGAMCommands(items, showCmds):
|
||||||
if not items:
|
if not items:
|
||||||
@@ -10262,6 +10233,14 @@ def doBatch(threadBatch=False):
|
|||||||
continue
|
continue
|
||||||
if argv:
|
if argv:
|
||||||
cmd = argv[0].strip().lower()
|
cmd = argv[0].strip().lower()
|
||||||
|
if cmd == Cmd.DATETIME_CMD:
|
||||||
|
if len(argv) == 2:
|
||||||
|
kwValues['datetime'] = todaysTime().strftime(argv[1])
|
||||||
|
else:
|
||||||
|
writeStderr(f'Command: >>>{Cmd.QuotedArgumentList([argv[0]])}<<< {Cmd.QuotedArgumentList(argv[1:])}\n')
|
||||||
|
writeStderr(f'{ERROR_PREFIX}{Cmd.ARGUMENT_ERROR_NAMES[Cmd.ARGUMENT_INVALID][1]}: {Msg.EXPECTED} <{Cmd.DATETIME_CMD} DateTimeFormat>)>\n')
|
||||||
|
errors += 1
|
||||||
|
continue
|
||||||
if cmd == Cmd.SET_CMD:
|
if cmd == Cmd.SET_CMD:
|
||||||
if len(argv) == 3:
|
if len(argv) == 3:
|
||||||
kwValues[argv[1]] = argv[2]
|
kwValues[argv[1]] = argv[2]
|
||||||
@@ -13353,7 +13332,7 @@ def getUserOrgUnits(cd, orgUnit, orgUnitId):
|
|||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnit, None), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnit, None, None), orderBy='email',
|
||||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
userOrgUnits = {}
|
userOrgUnits = {}
|
||||||
for user in result:
|
for user in result:
|
||||||
@@ -17848,10 +17827,29 @@ ORG_FIELD_INFO_ORDER = ['orgUnitId', 'name', 'description', 'parentOrgUnitPath',
|
|||||||
ORG_FIELDS_WITH_CRS_NLS = {'description'}
|
ORG_FIELDS_WITH_CRS_NLS = {'description'}
|
||||||
|
|
||||||
def _doInfoOrgs(entityList):
|
def _doInfoOrgs(entityList):
|
||||||
|
def _printUsers(entityType, orgUnitPath, isSuspended, isArchived):
|
||||||
|
users = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
|
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID_INPUT, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, isSuspended, isArchived), orderBy='email',
|
||||||
|
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
|
printEntitiesCount(entityType, None)
|
||||||
|
usersInOU = 0
|
||||||
|
Ind.Increment()
|
||||||
|
orgUnitPath = orgUnitPath.lower()
|
||||||
|
for user in users:
|
||||||
|
if orgUnitPath == user['orgUnitPath'].lower():
|
||||||
|
printKeyValueList([user['primaryEmail']])
|
||||||
|
usersInOU += 1
|
||||||
|
elif showChildren:
|
||||||
|
printKeyValueList([f'{user["primaryEmail"]} (child)'])
|
||||||
|
usersInOU += 1
|
||||||
|
Ind.Decrement()
|
||||||
|
printKeyValueList([Msg.TOTAL_ITEMS_IN_ENTITY.format(Ent.Plural(entityType), Ent.Singular(Ent.ORGANIZATIONAL_UNIT)), usersInOU])
|
||||||
|
|
||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
getUsers = True
|
getUsers = True
|
||||||
isSuspended = None
|
isSuspended = isArchived = None
|
||||||
entityType = Ent.USER
|
|
||||||
showChildren = False
|
showChildren = False
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
@@ -17859,7 +17857,8 @@ def _doInfoOrgs(entityList):
|
|||||||
getUsers = False
|
getUsers = False
|
||||||
elif myarg in SUSPENDED_ARGUMENTS:
|
elif myarg in SUSPENDED_ARGUMENTS:
|
||||||
isSuspended = _getIsSuspended(myarg)
|
isSuspended = _getIsSuspended(myarg)
|
||||||
entityType = Ent.USER_SUSPENDED if isSuspended else Ent.USER_NOT_SUSPENDED
|
elif myarg in ARCHIVED_ARGUMENTS:
|
||||||
|
isArchived = _getIsArchived(myarg)
|
||||||
elif myarg in {'children', 'child'}:
|
elif myarg in {'children', 'child'}:
|
||||||
showChildren = True
|
showChildren = True
|
||||||
else:
|
else:
|
||||||
@@ -17890,38 +17889,29 @@ def _doInfoOrgs(entityList):
|
|||||||
printKeyValueWithCRsNLs(field, value)
|
printKeyValueWithCRsNLs(field, value)
|
||||||
if getUsers:
|
if getUsers:
|
||||||
orgUnitPath = result['orgUnitPath']
|
orgUnitPath = result['orgUnitPath']
|
||||||
users = callGAPIpages(cd.users(), 'list', 'users',
|
if isArchived is None and isSuspended is None:
|
||||||
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID_INPUT, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
_printUsers(Ent.USER, orgUnitPath, None, None)
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
else:
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, isSuspended), orderBy='email',
|
if isArchived is not None:
|
||||||
fields='nextPageToken,users(primaryEmail,orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
_printUsers(Ent.USER_ARCHIVED if isArchived else Ent.USER_NOT_ARCHIVED, orgUnitPath, None, isArchived)
|
||||||
printEntitiesCount(entityType, None)
|
if isSuspended is not None:
|
||||||
usersInOU = 0
|
_printUsers(Ent.USER_SUSPENDED if isSuspended else Ent.USER_NOT_SUSPENDED, orgUnitPath, isSuspended, None)
|
||||||
Ind.Increment()
|
|
||||||
orgUnitPath = orgUnitPath.lower()
|
|
||||||
for user in users:
|
|
||||||
if orgUnitPath == user['orgUnitPath'].lower():
|
|
||||||
printKeyValueList([user['primaryEmail']])
|
|
||||||
usersInOU += 1
|
|
||||||
elif showChildren:
|
|
||||||
printKeyValueList([f'{user["primaryEmail"]} (child)'])
|
|
||||||
usersInOU += 1
|
|
||||||
Ind.Decrement()
|
|
||||||
printKeyValueList([Msg.TOTAL_ITEMS_IN_ENTITY.format(Ent.Plural(entityType), Ent.Singular(Ent.ORGANIZATIONAL_UNIT)), usersInOU])
|
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
except (GAPI.invalidInput, GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.backendError):
|
except (GAPI.invalidInput, GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.backendError):
|
||||||
entityActionFailedWarning([Ent.ORGANIZATIONAL_UNIT, orgUnitPath], Msg.DOES_NOT_EXIST, i, count)
|
entityActionFailedWarning([Ent.ORGANIZATIONAL_UNIT, orgUnitPath], Msg.DOES_NOT_EXIST, i, count)
|
||||||
except (GAPI.badRequest, GAPI.invalidCustomerId, GAPI.loginRequired, GAPI.resourceNotFound, GAPI.forbidden):
|
except (GAPI.badRequest, GAPI.invalidCustomerId, GAPI.loginRequired, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
checkEntityAFDNEorAccessErrorExit(cd, Ent.ORGANIZATIONAL_UNIT, orgUnitPath)
|
checkEntityAFDNEorAccessErrorExit(cd, Ent.ORGANIZATIONAL_UNIT, orgUnitPath)
|
||||||
|
|
||||||
# gam info orgs|ous <OrgUnitEntity> [nousers|notsuspended|suspended] [children|child]
|
# gam info org|ou <OrgUnitItem>
|
||||||
def doInfoOrgs():
|
# [nousers | ([notarchived|archived] [notsuspended|suspended])] [children|child]
|
||||||
_doInfoOrgs(getEntityList(Cmd.OB_ORGUNIT_ENTITY, shlexSplit=True))
|
|
||||||
|
|
||||||
# gam info org|ou <OrgUnitItem> [nousers|notsuspended|suspended] [children|child]
|
|
||||||
def doInfoOrg():
|
def doInfoOrg():
|
||||||
_doInfoOrgs([getOrgUnitItem()])
|
_doInfoOrgs([getOrgUnitItem()])
|
||||||
|
|
||||||
|
# gam info orgs|ous <OrgUnitEntity>
|
||||||
|
# [nousers | ([notarchived|archived] [notsuspended|suspended])] [children|child]
|
||||||
|
def doInfoOrgs():
|
||||||
|
_doInfoOrgs(getEntityList(Cmd.OB_ORGUNIT_ENTITY, shlexSplit=True))
|
||||||
|
|
||||||
ORG_ARGUMENT_TO_FIELD_MAP = {
|
ORG_ARGUMENT_TO_FIELD_MAP = {
|
||||||
'blockinheritance': 'blockInheritance',
|
'blockinheritance': 'blockInheritance',
|
||||||
'inheritanceblocked': 'blockInheritance',
|
'inheritanceblocked': 'blockInheritance',
|
||||||
@@ -18151,7 +18141,7 @@ def doPrintOrgs():
|
|||||||
return
|
return
|
||||||
if showUserCounts:
|
if showUserCounts:
|
||||||
for orgUnit in orgUnits:
|
for orgUnit in orgUnits:
|
||||||
userCounts[orgUnit['orgUnitPath']] = [0, 0]
|
userCounts[orgUnit['orgUnitPath']] = {'suspended': [0, 0], 'archived': [0, 0], 'total': 0}
|
||||||
qualifier = Msg.IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT))
|
qualifier = Msg.IN_THE.format(Ent.Singular(Ent.ORGANIZATIONAL_UNIT))
|
||||||
printGettingAllEntityItemsForWhom(Ent.USER, orgUnitPath, qualifier=qualifier, entityType=Ent.ORGANIZATIONAL_UNIT)
|
printGettingAllEntityItemsForWhom(Ent.USER, orgUnitPath, qualifier=qualifier, entityType=Ent.ORGANIZATIONAL_UNIT)
|
||||||
pageMessage = getPageMessageForWhom()
|
pageMessage = getPageMessageForWhom()
|
||||||
@@ -18161,12 +18151,14 @@ def doPrintOrgs():
|
|||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None), orderBy='email',
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None, None), orderBy='email',
|
||||||
fields='nextPageToken,users(orgUnitPath,suspended)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(orgUnitPath,suspended,archived)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
for user in users:
|
for user in users:
|
||||||
if user['orgUnitPath'] in userCounts:
|
if user['orgUnitPath'] in userCounts:
|
||||||
userCounts[user['orgUnitPath']][user['suspended']] += 1
|
userCounts[user['orgUnitPath']]['suspended'][user['suspended']] += 1
|
||||||
|
userCounts[user['orgUnitPath']]['archived'][user['archived']] += 1
|
||||||
|
userCounts[user['orgUnitPath']]['total'] += 1
|
||||||
except (GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.invalidInput, GAPI.badRequest, GAPI.backendError,
|
except (GAPI.invalidOrgunit, GAPI.orgunitNotFound, GAPI.invalidInput, GAPI.badRequest, GAPI.backendError,
|
||||||
GAPI.invalidCustomerId, GAPI.loginRequired, GAPI.resourceNotFound, GAPI.forbidden):
|
GAPI.invalidCustomerId, GAPI.loginRequired, GAPI.resourceNotFound, GAPI.forbidden):
|
||||||
checkEntityDNEorAccessErrorExit(cd, Ent.ORGANIZATIONAL_UNIT, orgUnitPath)
|
checkEntityDNEorAccessErrorExit(cd, Ent.ORGANIZATIONAL_UNIT, orgUnitPath)
|
||||||
@@ -18233,15 +18225,34 @@ def doPrintOrgs():
|
|||||||
(maxCrOSCounts != -1 and total > maxCrOSCounts)):
|
(maxCrOSCounts != -1 and total > maxCrOSCounts)):
|
||||||
continue
|
continue
|
||||||
if showUserCounts:
|
if showUserCounts:
|
||||||
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}NotSuspended'] = userCounts[orgUnitPath][0]
|
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}NotArchived'] = userCounts[orgUnitPath]['archived'][0]
|
||||||
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}Suspended'] = userCounts[orgUnitPath][1]
|
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}Archived'] = userCounts[orgUnitPath]['archived'][1]
|
||||||
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}Total'] = total = userCounts[orgUnitPath][0]+userCounts[orgUnitPath][1]
|
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}NotSuspended'] = userCounts[orgUnitPath]['suspended'][0]
|
||||||
|
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}Suspended'] = userCounts[orgUnitPath]['suspended'][1]
|
||||||
|
row[f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}Total'] = total = userCounts[orgUnitPath]['total']
|
||||||
if ((minUserCounts != -1 and total < minUserCounts) or
|
if ((minUserCounts != -1 and total < minUserCounts) or
|
||||||
(maxUserCounts != -1 and total > maxUserCounts)):
|
(maxUserCounts != -1 and total > maxUserCounts)):
|
||||||
continue
|
continue
|
||||||
csvPF.WriteRowTitles(row)
|
csvPF.WriteRowTitles(row)
|
||||||
else:
|
else:
|
||||||
csvPF.WriteRow(row)
|
csvPF.WriteRow(row)
|
||||||
|
if showCrOSCounts or showUserCounts:
|
||||||
|
crosTitles = []
|
||||||
|
userTitles = []
|
||||||
|
allTitles = csvPF.titlesList[:]
|
||||||
|
for title in allTitles:
|
||||||
|
if showCrOSCounts and title.startswith(f'CrOS{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}'):
|
||||||
|
crosTitles.append(title)
|
||||||
|
csvPF.RemoveTitles(title)
|
||||||
|
if showUserCounts and title.startswith(f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}'):
|
||||||
|
userTitles.append(title)
|
||||||
|
csvPF.RemoveTitles(title)
|
||||||
|
if showCrOSCounts:
|
||||||
|
csvPF.AddTitles(sorted(crosTitles))
|
||||||
|
if showUserCounts:
|
||||||
|
for title in ['NotArchived', 'Archived', 'NotSuspended', 'Suspended', 'Total']:
|
||||||
|
csvPF.AddTitles(f'Users{GC.Values[GC.CSV_OUTPUT_SUBFIELD_DELIMITER]}{title}')
|
||||||
|
csvPF.SetSortTitles([])
|
||||||
csvPF.writeCSVfile('Orgs')
|
csvPF.writeCSVfile('Orgs')
|
||||||
|
|
||||||
# gam show orgtree [fromparent <OrgUnitItem>] [batchsuborgs [Boolean>]]
|
# gam show orgtree [fromparent <OrgUnitItem>] [batchsuborgs [Boolean>]]
|
||||||
@@ -18451,7 +18462,7 @@ def doCheckOrgUnit():
|
|||||||
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
throwReasons=[GAPI.INVALID_ORGUNIT, GAPI.ORGUNIT_NOT_FOUND,
|
||||||
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
GAPI.INVALID_INPUT, GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None),
|
customer=GC.Values[GC.CUSTOMER_ID], query=orgUnitPathQuery(orgUnitPath, None, None),
|
||||||
fields='nextPageToken,users(orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
fields='nextPageToken,users(orgUnitPath)', maxResults=GC.Values[GC.USER_MAX_RESULTS])
|
||||||
for users in feed:
|
for users in feed:
|
||||||
for user in users:
|
for user in users:
|
||||||
@@ -18872,7 +18883,7 @@ def makeUserGroupDomainQueryFilters(kwargsDict):
|
|||||||
kwargsQueries.append((kwargs, query))
|
kwargsQueries.append((kwargs, query))
|
||||||
return kwargsQueries
|
return kwargsQueries
|
||||||
|
|
||||||
def userFilters(kwargs, query, orgUnitPath, isSuspended):
|
def userFilters(kwargs, query, orgUnitPath, isSuspended, isArchived):
|
||||||
queryTitle = ''
|
queryTitle = ''
|
||||||
if kwargs.get('domain'):
|
if kwargs.get('domain'):
|
||||||
queryTitle += f'domain={kwargs["domain"]}, '
|
queryTitle += f'domain={kwargs["domain"]}, '
|
||||||
@@ -18891,6 +18902,12 @@ def userFilters(kwargs, query, orgUnitPath, isSuspended):
|
|||||||
else:
|
else:
|
||||||
query += ' '
|
query += ' '
|
||||||
query += f'isSuspended={isSuspended}'
|
query += f'isSuspended={isSuspended}'
|
||||||
|
if isArchived is not None:
|
||||||
|
if query is None:
|
||||||
|
query = ''
|
||||||
|
else:
|
||||||
|
query += ' '
|
||||||
|
query += f'isArchived={isArchived}'
|
||||||
if query is not None:
|
if query is not None:
|
||||||
queryTitle += f'query="{query}", '
|
queryTitle += f'query="{query}", '
|
||||||
if queryTitle:
|
if queryTitle:
|
||||||
@@ -18902,7 +18919,7 @@ def userFilters(kwargs, query, orgUnitPath, isSuspended):
|
|||||||
# [limittoou <OrgUnitItem>])
|
# [limittoou <OrgUnitItem>])
|
||||||
# [user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
# [user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||||
# [select <UserTypeEntity>]
|
# [select <UserTypeEntity>]
|
||||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
# [issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
# [shownoneditable] [nogroups] [nousers]
|
# [shownoneditable] [nogroups] [nousers]
|
||||||
# [onerowpertarget] [delimiter <Character>]
|
# [onerowpertarget] [delimiter <Character>]
|
||||||
# [suppressnoaliasrows]
|
# [suppressnoaliasrows]
|
||||||
@@ -18948,7 +18965,7 @@ def doPrintAliases():
|
|||||||
groups = []
|
groups = []
|
||||||
users = []
|
users = []
|
||||||
aliasMatchPattern = re.compile(r'^.*$')
|
aliasMatchPattern = re.compile(r'^.*$')
|
||||||
isSuspended = orgUnitPath = None
|
isArchived = isSuspended = orgUnitPath = None
|
||||||
addCSVData = {}
|
addCSVData = {}
|
||||||
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
@@ -18972,8 +18989,10 @@ def doPrintAliases():
|
|||||||
pass
|
pass
|
||||||
elif myarg == 'select':
|
elif myarg == 'select':
|
||||||
_, users = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
_, users = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
||||||
elif myarg == 'issuspended':
|
elif myarg in SUSPENDED_ARGUMENTS:
|
||||||
isSuspended = getBoolean()
|
isSuspended = _getIsSuspended(myarg)
|
||||||
|
elif myarg in ARCHIVED_ARGUMENTS:
|
||||||
|
isArchived = _getIsArchived(myarg)
|
||||||
elif myarg in {'user','users'}:
|
elif myarg in {'user','users'}:
|
||||||
users.extend(convertEntityToList(getString(Cmd.OB_EMAIL_ADDRESS_LIST, minLen=0)))
|
users.extend(convertEntityToList(getString(Cmd.OB_EMAIL_ADDRESS_LIST, minLen=0)))
|
||||||
elif myarg in {'group', 'groups'}:
|
elif myarg in {'group', 'groups'}:
|
||||||
@@ -19008,7 +19027,7 @@ def doPrintAliases():
|
|||||||
for kwargsQuery in makeUserGroupDomainQueryFilters(kwargsDict):
|
for kwargsQuery in makeUserGroupDomainQueryFilters(kwargsDict):
|
||||||
kwargs = kwargsQuery[0]
|
kwargs = kwargsQuery[0]
|
||||||
query = kwargsQuery[1]
|
query = kwargsQuery[1]
|
||||||
query, pquery = userFilters(kwargs, query, orgUnitPath, isSuspended)
|
query, pquery = userFilters(kwargs, query, orgUnitPath, isSuspended, isArchived)
|
||||||
printGettingAllAccountEntities(Ent.USER, pquery)
|
printGettingAllAccountEntities(Ent.USER, pquery)
|
||||||
try:
|
try:
|
||||||
entityList = callGAPIpages(cd.users(), 'list', 'users',
|
entityList = callGAPIpages(cd.users(), 'list', 'users',
|
||||||
@@ -45690,7 +45709,7 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
|||||||
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
||||||
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
# [convertcrnl]
|
# [convertcrnl]
|
||||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
# [issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
# [showitemcountonly]
|
# [showitemcountonly]
|
||||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
#
|
#
|
||||||
@@ -45703,7 +45722,7 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
|||||||
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
# [userview] [basic|full|allfields | <UserFieldName>* | fields <UserFieldNameList>]
|
||||||
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
# [delimiter <Character>] [sortheaders] [formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
# [convertcrnl]
|
# [convertcrnl]
|
||||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
# [issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
# [showitemcountonly]
|
# [showitemcountonly]
|
||||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
#
|
#
|
||||||
@@ -45711,13 +45730,13 @@ USERS_INDEXED_TITLES = ['addresses', 'aliases', 'nonEditableAliases', 'emails',
|
|||||||
# ([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
# ([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)]
|
||||||
# [limittoou <OrgUnitItem>] [deleted_only|only_deleted])|[select <UserTypeEntity>]
|
# [limittoou <OrgUnitItem>] [deleted_only|only_deleted])|[select <UserTypeEntity>]
|
||||||
# [formatjson [quotechar <Character>]] [countonly]
|
# [formatjson [quotechar <Character>]] [countonly]
|
||||||
# [issuspended <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
# [issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
||||||
# [showitemcountonly]
|
# [showitemcountonly]
|
||||||
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
# [showvalidcolumn] (addcsvdata <FieldName> <String>)*
|
||||||
#
|
#
|
||||||
# gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
# gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
||||||
# [formatjson [quotechar <Character>]] [countonly]
|
# [formatjson [quotechar <Character>]] [countonly]
|
||||||
# [issuspended <Boolean>]
|
# [issuspended <Boolean>] [isarchived <Boolean>]
|
||||||
# [showitemcountonly]
|
# [showitemcountonly]
|
||||||
def doPrintUsers(entityList=None):
|
def doPrintUsers(entityList=None):
|
||||||
def _writeUserEntity(userEntity):
|
def _writeUserEntity(userEntity):
|
||||||
@@ -45873,7 +45892,7 @@ def doPrintUsers(entityList=None):
|
|||||||
schemaParms = _initSchemaParms('basic')
|
schemaParms = _initSchemaParms('basic')
|
||||||
projectionSet = False
|
projectionSet = False
|
||||||
oneLicensePerRow = quotePlusPhoneNumbers = showDeleted = False
|
oneLicensePerRow = quotePlusPhoneNumbers = showDeleted = False
|
||||||
aliasMatchPattern = isSuspended = orgUnitPath = orgUnitPathLower = orderBy = sortOrder = None
|
aliasMatchPattern = isArchived = isSuspended = orgUnitPath = orgUnitPathLower = orderBy = sortOrder = None
|
||||||
viewType = 'admin_view'
|
viewType = 'admin_view'
|
||||||
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
||||||
showValidColumn = ''
|
showValidColumn = ''
|
||||||
@@ -45892,8 +45911,10 @@ def doPrintUsers(entityList=None):
|
|||||||
showDeleted = True
|
showDeleted = True
|
||||||
elif entityList is None and myarg == 'select':
|
elif entityList is None and myarg == 'select':
|
||||||
_, entityList = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
_, entityList = getEntityToModify(defaultEntityType=Cmd.ENTITY_USERS)
|
||||||
elif myarg == 'issuspended':
|
elif myarg in SUSPENDED_ARGUMENTS:
|
||||||
isSuspended = getBoolean()
|
isSuspended = _getIsSuspended(myarg)
|
||||||
|
elif myarg in ARCHIVED_ARGUMENTS:
|
||||||
|
isArchived = _getIsArchived(myarg)
|
||||||
elif myarg == 'orderby':
|
elif myarg == 'orderby':
|
||||||
orderBy, sortOrder = getOrderBySortOrder(USERS_ORDERBY_CHOICE_MAP)
|
orderBy, sortOrder = getOrderBySortOrder(USERS_ORDERBY_CHOICE_MAP)
|
||||||
elif myarg == 'userview':
|
elif myarg == 'userview':
|
||||||
@@ -46006,7 +46027,7 @@ def doPrintUsers(entityList=None):
|
|||||||
for kwargsQuery in makeUserGroupDomainQueryFilters(kwargsDict):
|
for kwargsQuery in makeUserGroupDomainQueryFilters(kwargsDict):
|
||||||
kwargs = kwargsQuery[0]
|
kwargs = kwargsQuery[0]
|
||||||
query = kwargsQuery[1]
|
query = kwargsQuery[1]
|
||||||
query, pquery = userFilters(kwargs, query, orgUnitPath, isSuspended)
|
query, pquery = userFilters(kwargs, query, orgUnitPath, isSuspended, isArchived)
|
||||||
printGettingAllAccountEntities(Ent.USER, pquery)
|
printGettingAllAccountEntities(Ent.USER, pquery)
|
||||||
pageMessage = getPageMessage(showFirstLastItems=True)
|
pageMessage = getPageMessage(showFirstLastItems=True)
|
||||||
try:
|
try:
|
||||||
@@ -46016,9 +46037,9 @@ def doPrintUsers(entityList=None):
|
|||||||
GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN,
|
GAPI.BAD_REQUEST, GAPI.RESOURCE_NOT_FOUND, GAPI.FORBIDDEN,
|
||||||
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS+[GAPI.UNKNOWN_ERROR, GAPI.FAILED_PRECONDITION],
|
||||||
query=query, fields=fields,
|
|
||||||
showDeleted=showDeleted, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
showDeleted=showDeleted, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
||||||
projection=schemaParms['projection'], customFieldMask=schemaParms['customFieldMask'],
|
projection=schemaParms['projection'], customFieldMask=schemaParms['customFieldMask'],
|
||||||
|
query=query, fields=fields,
|
||||||
maxResults=maxResults, **kwargs)
|
maxResults=maxResults, **kwargs)
|
||||||
for users in feed:
|
for users in feed:
|
||||||
if orgUnitPath is None:
|
if orgUnitPath is None:
|
||||||
@@ -54970,7 +54991,7 @@ def getDriveFileAttribute(myarg, body, parameters, updateCmd):
|
|||||||
elif myarg == 'timestamp':
|
elif myarg == 'timestamp':
|
||||||
parameters[DFA_TIMESTAMP] = getBoolean()
|
parameters[DFA_TIMESTAMP] = getBoolean()
|
||||||
elif myarg == 'timeformat':
|
elif myarg == 'timeformat':
|
||||||
parameters[DFA_TIMEFORMAT] = getString(Cmd.OB_STRING, minLen=0)
|
parameters[DFA_TIMEFORMAT] = getString(Cmd.OB_DATETIME_FORMAT, minLen=0)
|
||||||
elif getDriveFileCopyAttribute(myarg, body, parameters):
|
elif getDriveFileCopyAttribute(myarg, body, parameters):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@@ -59557,7 +59578,7 @@ createReturnItemMap = {
|
|||||||
# [(localfile <FileName>|-)|(url <URL>)]
|
# [(localfile <FileName>|-)|(url <URL>)]
|
||||||
# [(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
# [(drivefilename|newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||||
# [stripnameprefix <String>]
|
# [stripnameprefix <String>]
|
||||||
# [timestamp <Boolean>]] [timeformat <String>]
|
# [timestamp <Boolean>]] [timeformat <DateTimeFormat>]
|
||||||
# <DriveFileCreateAttribute>* [noduplicate]
|
# <DriveFileCreateAttribute>* [noduplicate]
|
||||||
# [(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*)) |
|
# [(csv [todrive <ToDriveAttribute>*] (addcsvdata <FieldName> <String>)*)) |
|
||||||
# (returnidonly|returnlinkonly|returneditlinkonly|showdetails)]
|
# (returnidonly|returnlinkonly|returneditlinkonly|showdetails)]
|
||||||
@@ -60084,7 +60105,7 @@ def checkDriveFileShortcut(users):
|
|||||||
# [(localfile <FileName>|-)|(url <URL>)]
|
# [(localfile <FileName>|-)|(url <URL>)]
|
||||||
# [retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
# [retainname | (newfilename <DriveFileName>) | (replacefilename <REMatchPattern> <RESubstitution>)*]
|
||||||
# [stripnameprefix <String>]
|
# [stripnameprefix <String>]
|
||||||
# [timestamp <Boolean>]] [timeformat <String>]
|
# [timestamp <Boolean>]] [timeformat <DateTimeFormat>]
|
||||||
# <DriveFileUpdateAttribute>*
|
# <DriveFileUpdateAttribute>*
|
||||||
# [(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
# [(gsheet|csvsheet <SheetEntity> [clearfilter])|(addsheet <String>)]
|
||||||
# [charset <String>] [columndelimiter <Character>]
|
# [charset <String>] [columndelimiter <Character>]
|
||||||
|
|||||||
@@ -49,43 +49,71 @@ class GamCLArgs():
|
|||||||
ENTITY_CROS_OUS_AND_CHILDREN_QUERIES = 'cros_ous_and_children_queries'
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERIES = 'cros_ous_and_children_queries'
|
||||||
ENTITY_CROS_SN = 'cros_sn'
|
ENTITY_CROS_SN = 'cros_sn'
|
||||||
ENTITY_DOMAINS = 'domains'
|
ENTITY_DOMAINS = 'domains'
|
||||||
|
ENTITY_DOMAINS_NA = 'domains_na'
|
||||||
|
ENTITY_DOMAINS_ARCH = 'domains_arch'
|
||||||
ENTITY_DOMAINS_NS = 'domains_ns'
|
ENTITY_DOMAINS_NS = 'domains_ns'
|
||||||
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
||||||
|
ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
|
||||||
ENTITY_GROUP = 'group'
|
ENTITY_GROUP = 'group'
|
||||||
ENTITY_GROUP_INDE = 'group_inde'
|
ENTITY_GROUP_INDE = 'group_inde'
|
||||||
|
ENTITY_GROUP_NA = 'group_na'
|
||||||
|
ENTITY_GROUP_ARCH = 'group_arch'
|
||||||
ENTITY_GROUP_NS = 'group_ns'
|
ENTITY_GROUP_NS = 'group_ns'
|
||||||
ENTITY_GROUP_SUSP = 'group_susp'
|
ENTITY_GROUP_SUSP = 'group_susp'
|
||||||
|
ENTITY_GROUP_NA_NS = 'group_na_ns'
|
||||||
ENTITY_GROUPS = 'groups'
|
ENTITY_GROUPS = 'groups'
|
||||||
ENTITY_GROUPS_INDE = 'groups_inde'
|
ENTITY_GROUPS_INDE = 'groups_inde'
|
||||||
|
ENTITY_GROUPS_NA = 'groups_na'
|
||||||
|
ENTITY_GROUPS_ARCH = 'groups_arch'
|
||||||
ENTITY_GROUPS_NS = 'groups_ns'
|
ENTITY_GROUPS_NS = 'groups_ns'
|
||||||
ENTITY_GROUPS_SUSP = 'groups_susp'
|
ENTITY_GROUPS_SUSP = 'groups_susp'
|
||||||
|
ENTITY_GROUPS_NA_NS = 'groups_na_ns'
|
||||||
ENTITY_GROUP_USERS = 'group_users'
|
ENTITY_GROUP_USERS = 'group_users'
|
||||||
|
ENTITY_GROUP_USERS_NA = 'group_users_na'
|
||||||
|
ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
|
||||||
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
||||||
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
||||||
|
ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
|
||||||
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
||||||
ENTITY_LICENSES = 'licenses'
|
ENTITY_LICENSES = 'licenses'
|
||||||
ENTITY_OAUTHUSER = 'oauthuser'
|
ENTITY_OAUTHUSER = 'oauthuser'
|
||||||
ENTITY_OU = 'ou'
|
ENTITY_OU = 'ou'
|
||||||
|
ENTITY_OU_NA = 'ou_na'
|
||||||
|
ENTITY_OU_ARCH = 'ou_arch'
|
||||||
ENTITY_OU_NS = 'ou_ns'
|
ENTITY_OU_NS = 'ou_ns'
|
||||||
ENTITY_OU_SUSP = 'ou_susp'
|
ENTITY_OU_SUSP = 'ou_susp'
|
||||||
|
ENTITY_OU_NA_NS = 'ou_na_ns'
|
||||||
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
|
||||||
|
ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
|
||||||
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
|
||||||
ENTITY_OUS = 'ous'
|
ENTITY_OUS = 'ous'
|
||||||
|
ENTITY_OUS_NA = 'ous_na'
|
||||||
|
ENTITY_OUS_ARCH = 'ous_arch'
|
||||||
ENTITY_OUS_NS = 'ous_ns'
|
ENTITY_OUS_NS = 'ous_ns'
|
||||||
ENTITY_OUS_SUSP = 'ous_susp'
|
ENTITY_OUS_SUSP = 'ous_susp'
|
||||||
|
ENTITY_OUS_NA_NS = 'ous_na_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
|
||||||
|
ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
|
||||||
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
|
||||||
ENTITY_QUERIES = 'queries'
|
ENTITY_QUERIES = 'queries'
|
||||||
ENTITY_QUERY = 'query'
|
ENTITY_QUERY = 'query'
|
||||||
ENTITY_STUDENTS = 'students'
|
ENTITY_STUDENTS = 'students'
|
||||||
ENTITY_TEACHERS = 'teachers'
|
ENTITY_TEACHERS = 'teachers'
|
||||||
ENTITY_USER = 'user'
|
ENTITY_USER = 'user'
|
||||||
ENTITY_USERS = 'users'
|
ENTITY_USERS = 'users'
|
||||||
|
ENTITY_USERS_NA = 'users_na'
|
||||||
|
ENTITY_USERS_ARCH = 'users_arch'
|
||||||
ENTITY_USERS_NS = 'users_ns'
|
ENTITY_USERS_NS = 'users_ns'
|
||||||
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
|
||||||
ENTITY_USERS_SUSP = 'users_susp'
|
ENTITY_USERS_SUSP = 'users_susp'
|
||||||
|
ENTITY_USERS_NA_NS = 'users_na_ns'
|
||||||
|
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
|
||||||
|
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
||||||
#
|
#
|
||||||
BROWSER_ENTITIES = [
|
BROWSER_ENTITIES = [
|
||||||
ENTITY_BROWSER,
|
ENTITY_BROWSER,
|
||||||
@@ -118,34 +146,58 @@ class GamCLArgs():
|
|||||||
ENTITY_CIGROUP_USERS,
|
ENTITY_CIGROUP_USERS,
|
||||||
ENTITY_COURSEPARTICIPANTS,
|
ENTITY_COURSEPARTICIPANTS,
|
||||||
ENTITY_DOMAINS,
|
ENTITY_DOMAINS,
|
||||||
|
ENTITY_DOMAINS_NA,
|
||||||
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUP,
|
ENTITY_GROUP,
|
||||||
ENTITY_GROUP_INDE,
|
ENTITY_GROUP_INDE,
|
||||||
|
ENTITY_GROUP_NA,
|
||||||
|
ENTITY_GROUP_ARCH,
|
||||||
ENTITY_GROUP_NS,
|
ENTITY_GROUP_NS,
|
||||||
ENTITY_GROUP_SUSP,
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
|
ENTITY_GROUPS_NA,
|
||||||
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
|
ENTITY_GROUP_USERS_NA,
|
||||||
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_LICENSES,
|
ENTITY_LICENSES,
|
||||||
ENTITY_OAUTHUSER,
|
ENTITY_OAUTHUSER,
|
||||||
ENTITY_OU,
|
ENTITY_OU,
|
||||||
|
ENTITY_OU_NA,
|
||||||
|
ENTITY_OU_ARCH,
|
||||||
ENTITY_OU_NS,
|
ENTITY_OU_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OU_AND_CHILDREN,
|
ENTITY_OU_AND_CHILDREN,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA,
|
||||||
|
ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OU_AND_CHILDREN_NS,
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP,
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
|
ENTITY_OUS_NA,
|
||||||
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_QUERIES,
|
ENTITY_QUERIES,
|
||||||
ENTITY_QUERY,
|
ENTITY_QUERY,
|
||||||
ENTITY_STUDENTS,
|
ENTITY_STUDENTS,
|
||||||
@@ -222,29 +274,53 @@ class GamCLArgs():
|
|||||||
'licence': ENTITY_LICENSES,
|
'licence': ENTITY_LICENSES,
|
||||||
'licences': ENTITY_LICENSES,
|
'licences': ENTITY_LICENSES,
|
||||||
'org': ENTITY_OU,
|
'org': ENTITY_OU,
|
||||||
|
'org_na': ENTITY_OU_NA,
|
||||||
|
'org_arch': ENTITY_OU_ARCH,
|
||||||
'org_ns': ENTITY_OU_NS,
|
'org_ns': ENTITY_OU_NS,
|
||||||
'org_susp': ENTITY_OU_SUSP,
|
'org_susp': ENTITY_OU_SUSP,
|
||||||
|
'org_na_ns': ENTITY_OU_NA_NS,
|
||||||
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
|
'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
|
'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
||||||
|
'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
|
'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'orgs': ENTITY_OUS,
|
'orgs': ENTITY_OUS,
|
||||||
|
'orgs_na': ENTITY_OUS_NA,
|
||||||
|
'orgs_arch': ENTITY_OUS_ARCH,
|
||||||
'orgs_ns': ENTITY_OUS_NS,
|
'orgs_ns': ENTITY_OUS_NS,
|
||||||
'orgs_susp': ENTITY_OUS_SUSP,
|
'orgs_susp': ENTITY_OUS_SUSP,
|
||||||
|
'orgs_na_ns': ENTITY_OUS_NA_NS,
|
||||||
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
|
'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
||||||
|
'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
|
'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
|
'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
|
'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
# CL entity source selectors
|
# CL entity source selectors
|
||||||
ENTITY_SELECTOR_ALL = 'all'
|
ENTITY_SELECTOR_ALL = 'all'
|
||||||
@@ -315,30 +391,217 @@ class GamCLArgs():
|
|||||||
]
|
]
|
||||||
USER_ENTITY_SELECTOR_ALL_SUBTYPES = [
|
USER_ENTITY_SELECTOR_ALL_SUBTYPES = [
|
||||||
ENTITY_USERS,
|
ENTITY_USERS,
|
||||||
|
ENTITY_USERS_NA,
|
||||||
|
ENTITY_USERS_ARCH,
|
||||||
ENTITY_USERS_NS,
|
ENTITY_USERS_NS,
|
||||||
ENTITY_USERS_NS_SUSP,
|
|
||||||
ENTITY_USERS_SUSP,
|
ENTITY_USERS_SUSP,
|
||||||
|
ENTITY_USERS_ARCH_OR_SUSP,
|
||||||
|
ENTITY_USERS_NA_NS,
|
||||||
|
ENTITY_USERS_NS_SUSP,
|
||||||
]
|
]
|
||||||
#
|
#
|
||||||
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
||||||
ENTITY_ALL_USERS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS
|
ENTITY_ALL_USERS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS
|
||||||
|
ENTITY_ALL_USERS_NA = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA
|
||||||
|
ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
|
||||||
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
||||||
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
|
||||||
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
||||||
|
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
|
||||||
|
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
|
||||||
|
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
||||||
|
#
|
||||||
|
ALL_USER_ENTITY_TYPES = {
|
||||||
|
ENTITY_ALL_USERS,
|
||||||
|
ENTITY_ALL_USERS_NA,
|
||||||
|
ENTITY_ALL_USERS_ARCH,
|
||||||
|
ENTITY_ALL_USERS_NS,
|
||||||
|
ENTITY_ALL_USERS_SUSP,
|
||||||
|
ENTITY_ALL_USERS_NA_NS,
|
||||||
|
ENTITY_ALL_USERS_NS_SUSP,
|
||||||
|
}
|
||||||
|
DOMAIN_ENTITY_TYPES = {
|
||||||
|
ENTITY_DOMAINS,
|
||||||
|
ENTITY_DOMAINS_NA,
|
||||||
|
ENTITY_DOMAINS_ARCH,
|
||||||
|
ENTITY_DOMAINS_NS,
|
||||||
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NA_NS,
|
||||||
|
}
|
||||||
|
GROUP_ENTITY_TYPES = {
|
||||||
|
ENTITY_GROUP,
|
||||||
|
ENTITY_GROUP_NA,
|
||||||
|
ENTITY_GROUP_ARCH,
|
||||||
|
ENTITY_GROUP_NS,
|
||||||
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NA_NS,
|
||||||
|
ENTITY_GROUP_INDE,
|
||||||
|
}
|
||||||
|
GROUPS_ENTITY_TYPES = {
|
||||||
|
ENTITY_GROUPS,
|
||||||
|
ENTITY_GROUPS_NA,
|
||||||
|
ENTITY_GROUPS_ARCH,
|
||||||
|
ENTITY_GROUPS_NS,
|
||||||
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NA_NS,
|
||||||
|
ENTITY_GROUPS_INDE,
|
||||||
|
}
|
||||||
|
GROUP_USERS_ENTITY_TYPES = {
|
||||||
|
ENTITY_GROUP_USERS,
|
||||||
|
ENTITY_GROUP_USERS_NA,
|
||||||
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
|
ENTITY_GROUP_USERS_NS,
|
||||||
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
|
}
|
||||||
|
OU_ENTITY_TYPES = {
|
||||||
|
ENTITY_OU,
|
||||||
|
ENTITY_OU_AND_CHILDREN,
|
||||||
|
ENTITY_OU_NA,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA,
|
||||||
|
ENTITY_OU_ARCH,
|
||||||
|
ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
|
ENTITY_OU_NS,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
|
ENTITY_OU_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_NA_NS,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
|
}
|
||||||
|
OUS_ENTITY_TYPES = {
|
||||||
|
ENTITY_OUS,
|
||||||
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
|
ENTITY_OUS_NA,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
ENTITY_OUS_ARCH,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
|
ENTITY_OUS_NS,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_NA_NS,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
|
}
|
||||||
|
OU_DIRECT_ENTITY_TYPES = {
|
||||||
|
ENTITY_OU,
|
||||||
|
ENTITY_OUS,
|
||||||
|
ENTITY_OU_NA,
|
||||||
|
ENTITY_OUS_NA,
|
||||||
|
ENTITY_OU_ARCH,
|
||||||
|
ENTITY_OUS_ARCH,
|
||||||
|
ENTITY_OU_NS,
|
||||||
|
ENTITY_OUS_NS,
|
||||||
|
ENTITY_OU_SUSP,
|
||||||
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OU_NA_NS,
|
||||||
|
ENTITY_OUS_NA_NS,
|
||||||
|
}
|
||||||
|
CROS_OU_ENTITY_TYPES = {
|
||||||
|
ENTITY_CROS_OU,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN,
|
||||||
|
ENTITY_CROS_OU_QUERY,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERY,
|
||||||
|
ENTITY_CROS_OU_QUERIES,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
|
||||||
|
}
|
||||||
|
CROS_OUS_ENTITY_TYPES = {
|
||||||
|
ENTITY_CROS_OUS,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN,
|
||||||
|
ENTITY_CROS_OUS_QUERY,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
|
||||||
|
ENTITY_CROS_OUS_QUERIES,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
|
||||||
|
}
|
||||||
|
CROS_OU_CHILDREN_ENTITY_TYPES = {
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERY,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
|
||||||
|
}
|
||||||
|
CROS_OU_QUERY_ENTITY_TYPES = {
|
||||||
|
ENTITY_CROS_OU_QUERY,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERY,
|
||||||
|
ENTITY_CROS_OUS_QUERY,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERY,
|
||||||
|
}
|
||||||
|
CROS_OU_QUERIES_ENTITY_TYPES = {
|
||||||
|
ENTITY_CROS_OU_QUERIES,
|
||||||
|
ENTITY_CROS_OU_AND_CHILDREN_QUERIES,
|
||||||
|
ENTITY_CROS_OUS_QUERIES,
|
||||||
|
ENTITY_CROS_OUS_AND_CHILDREN_QUERIES,
|
||||||
|
}
|
||||||
#
|
#
|
||||||
ALL_USERS_QUERY_MAP = {
|
ALL_USERS_QUERY_MAP = {
|
||||||
ENTITY_ALL_USERS: 'isSuspended=False',
|
ENTITY_ALL_USERS: 'isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_NA: 'isArchived=False',
|
||||||
|
ENTITY_ALL_USERS_ARCH: 'isArchived=True',
|
||||||
ENTITY_ALL_USERS_NS: 'isSuspended=False',
|
ENTITY_ALL_USERS_NS: 'isSuspended=False',
|
||||||
ENTITY_ALL_USERS_NS_SUSP: None,
|
|
||||||
ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
|
ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_NS_SUSP: None,
|
||||||
|
}
|
||||||
|
DOMAINS_QUERY_MAP = {
|
||||||
|
ENTITY_DOMAINS: None,
|
||||||
|
ENTITY_DOMAINS_NA: 'isArchived=False',
|
||||||
|
ENTITY_DOMAINS_ARCH: 'isArchived=True',
|
||||||
|
ENTITY_DOMAINS_NS: 'isSuspended=False',
|
||||||
|
ENTITY_DOMAINS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
|
||||||
|
}
|
||||||
|
GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
|
ENTITY_GROUP_NA: (False, None),
|
||||||
|
ENTITY_GROUPS_NA: (False, None),
|
||||||
|
ENTITY_GROUP_ARCH: (True, None),
|
||||||
|
ENTITY_GROUPS_ARCH: (True, None),
|
||||||
|
ENTITY_GROUP_NS: (None, False),
|
||||||
|
ENTITY_GROUPS_NS: (None, False),
|
||||||
|
ENTITY_GROUP_SUSP: (None, True),
|
||||||
|
ENTITY_GROUPS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_NA_NS: (False, False),
|
||||||
|
ENTITY_GROUPS_NA_NS: (False, False),
|
||||||
|
}
|
||||||
|
GROUP_USERS_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
|
ENTITY_GROUP_USERS_NA: (False, None),
|
||||||
|
ENTITY_GROUP_USERS_ARCH: (True, None),
|
||||||
|
ENTITY_GROUP_USERS_NS: (None, False),
|
||||||
|
ENTITY_GROUP_USERS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_USERS_NA_NS: (False, False),
|
||||||
|
}
|
||||||
|
OU_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
|
ENTITY_OU_NA: (False, None),
|
||||||
|
ENTITY_OUS_NA: (False, None),
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA: (False, None),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA: (False, None),
|
||||||
|
ENTITY_OU_ARCH: (True, None),
|
||||||
|
ENTITY_OUS_ARCH: (True, None),
|
||||||
|
ENTITY_OU_AND_CHILDREN_ARCH: (True, None),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_ARCH: (True, None),
|
||||||
|
ENTITY_OU_NS: (None, False),
|
||||||
|
ENTITY_OUS_NS: (None, False),
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS: (None, False),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS: (None, False),
|
||||||
|
ENTITY_OU_SUSP: (None, True),
|
||||||
|
ENTITY_OUS_SUSP: (None, True),
|
||||||
|
ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
|
||||||
|
ENTITY_OU_NA_NS: (False, False),
|
||||||
|
ENTITY_OUS_NA_NS: (False, False),
|
||||||
|
ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA_NS: (False, False),
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
ENTITY_SELECTOR_ALL_SUBTYPES_MAP = {
|
ENTITY_SELECTOR_ALL_SUBTYPES_MAP = {
|
||||||
ENTITY_CROS: ENTITY_ALL_CROS,
|
ENTITY_CROS: ENTITY_ALL_CROS,
|
||||||
ENTITY_USERS: ENTITY_ALL_USERS,
|
ENTITY_USERS: ENTITY_ALL_USERS,
|
||||||
|
ENTITY_USERS_NA: ENTITY_ALL_USERS_NA,
|
||||||
|
ENTITY_USERS_ARCH: ENTITY_ALL_USERS_ARCH,
|
||||||
ENTITY_USERS_NS: ENTITY_ALL_USERS_NS,
|
ENTITY_USERS_NS: ENTITY_ALL_USERS_NS,
|
||||||
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
|
||||||
ENTITY_USERS_SUSP: ENTITY_ALL_USERS_SUSP,
|
ENTITY_USERS_SUSP: ENTITY_ALL_USERS_SUSP,
|
||||||
|
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
|
||||||
|
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
|
||||||
|
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
||||||
}
|
}
|
||||||
# Allowed values for CL source selector datafile, csvkmd
|
# Allowed values for CL source selector datafile, csvkmd
|
||||||
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
||||||
@@ -352,22 +615,37 @@ class GamCLArgs():
|
|||||||
ENTITY_CIGROUPS,
|
ENTITY_CIGROUPS,
|
||||||
ENTITY_CIGROUP_USERS,
|
ENTITY_CIGROUP_USERS,
|
||||||
ENTITY_DOMAINS,
|
ENTITY_DOMAINS,
|
||||||
|
ENTITY_DOMAINS_NA,
|
||||||
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
|
ENTITY_GROUPS_NA,
|
||||||
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
|
ENTITY_GROUP_USERS_NA,
|
||||||
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
|
ENTITY_OUS_NA,
|
||||||
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_COURSEPARTICIPANTS,
|
ENTITY_COURSEPARTICIPANTS,
|
||||||
ENTITY_STUDENTS,
|
ENTITY_STUDENTS,
|
||||||
ENTITY_TEACHERS,
|
ENTITY_TEACHERS,
|
||||||
@@ -377,6 +655,7 @@ class GamCLArgs():
|
|||||||
GAM_CMD = 'gam'
|
GAM_CMD = 'gam'
|
||||||
COMMIT_BATCH_CMD = 'commit-batch'
|
COMMIT_BATCH_CMD = 'commit-batch'
|
||||||
PRINT_CMD = 'print'
|
PRINT_CMD = 'print'
|
||||||
|
DATETIME_CMD = 'datetime'
|
||||||
SET_CMD = 'set'
|
SET_CMD = 'set'
|
||||||
CLEAR_CMD = 'clear'
|
CLEAR_CMD = 'clear'
|
||||||
SLEEP_CMD = 'sleep'
|
SLEEP_CMD = 'sleep'
|
||||||
@@ -924,6 +1203,7 @@ class GamCLArgs():
|
|||||||
OB_CSE_KEYPAIR_ID = 'CSEKeyPairID'
|
OB_CSE_KEYPAIR_ID = 'CSEKeyPairID'
|
||||||
OB_CUSTOMER_ID = 'CustomerID'
|
OB_CUSTOMER_ID = 'CustomerID'
|
||||||
OB_CUSTOMER_AUTH_TOKEN = 'CustomerAuthToken'
|
OB_CUSTOMER_AUTH_TOKEN = 'CustomerAuthToken'
|
||||||
|
OB_DATETIME_FORMAT = 'DateTimeFormat'
|
||||||
OB_DEVICE_FILE_ENTITY = 'DeviceFileEntity'
|
OB_DEVICE_FILE_ENTITY = 'DeviceFileEntity'
|
||||||
OB_DEVICE_ENTITY = 'DeviceEntity'
|
OB_DEVICE_ENTITY = 'DeviceEntity'
|
||||||
OB_DEVICE_ID = 'DeviceID'
|
OB_DEVICE_ID = 'DeviceID'
|
||||||
|
|||||||
@@ -384,11 +384,13 @@ class GamEntity():
|
|||||||
URL = 'url '
|
URL = 'url '
|
||||||
USER = 'user'
|
USER = 'user'
|
||||||
USER_ALIAS = 'uali'
|
USER_ALIAS = 'uali'
|
||||||
|
USER_NOT_ARCHIVED = 'usna'
|
||||||
|
USER_ARCHIVED = 'usar'
|
||||||
USER_EMAIL = 'uema'
|
USER_EMAIL = 'uema'
|
||||||
USER_INVITATION = 'uinv'
|
USER_INVITATION = 'uinv'
|
||||||
USER_NOT_SUSPENDED = 'uns'
|
USER_NOT_SUSPENDED = 'usns'
|
||||||
USER_SCHEMA = 'usch'
|
|
||||||
USER_SUSPENDED = 'usup'
|
USER_SUSPENDED = 'usup'
|
||||||
|
USER_SCHEMA = 'usch'
|
||||||
VACATION = 'vaca'
|
VACATION = 'vaca'
|
||||||
VACATION_ENABLED = 'vace'
|
VACATION_ENABLED = 'vace'
|
||||||
VALUE = 'val'
|
VALUE = 'val'
|
||||||
@@ -748,11 +750,13 @@ class GamEntity():
|
|||||||
URL: ['URLs', 'URL'],
|
URL: ['URLs', 'URL'],
|
||||||
USER: ['Users', 'User'],
|
USER: ['Users', 'User'],
|
||||||
USER_ALIAS: ['User Aliases', 'User Alias'],
|
USER_ALIAS: ['User Aliases', 'User Alias'],
|
||||||
|
USER_NOT_ARCHIVED: ['Users (Not archived)', 'User (Not archived)'],
|
||||||
|
USER_ARCHIVED: ['Users (Archived)', 'User (Archived)'],
|
||||||
USER_EMAIL: ['User Emails', 'User Email'],
|
USER_EMAIL: ['User Emails', 'User Email'],
|
||||||
USER_INVITATION: ['User Invitations', 'User Invitation'],
|
USER_INVITATION: ['User Invitations', 'User Invitation'],
|
||||||
USER_NOT_SUSPENDED: ['Users (Not suspended)', 'User (Not suspended)'],
|
USER_NOT_SUSPENDED: ['Users (Not suspended)', 'User (Not suspended)'],
|
||||||
USER_SCHEMA: ['Schemas', 'Schema'],
|
|
||||||
USER_SUSPENDED: ['Users (Suspended)', 'User (Suspended)'],
|
USER_SUSPENDED: ['Users (Suspended)', 'User (Suspended)'],
|
||||||
|
USER_SCHEMA: ['Schemas', 'Schema'],
|
||||||
VACATION: ['Vacation', 'Vacation'],
|
VACATION: ['Vacation', 'Vacation'],
|
||||||
VACATION_ENABLED: ['Vacation Enabled', 'Vacation Enabled'],
|
VACATION_ENABLED: ['Vacation Enabled', 'Vacation Enabled'],
|
||||||
VALUE: ['Values', 'Value'],
|
VALUE: ['Values', 'Value'],
|
||||||
|
|||||||
Reference in New Issue
Block a user