mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-09 22:23:35 +00:00
Allow multiple queries, more CrOS options (#722)
* Allow multiple queries, more CrOS options * Minor documentation fixes * Documentation fixes
This commit is contained in:
@ -161,7 +161,6 @@ Named items
|
|||||||
<MatterItem> ::= <UniqueID>|<String>
|
<MatterItem> ::= <UniqueID>|<String>
|
||||||
<MaximumNumberOfSeats> ::= <Number>
|
<MaximumNumberOfSeats> ::= <Number>
|
||||||
<MobileID> ::= <String>
|
<MobileID> ::= <String>
|
||||||
<MobileItem> ::= <MobileID>|(query:<QueryMobile>)|(query <QueryMobile>)
|
|
||||||
<Name> ::= <String>
|
<Name> ::= <String>
|
||||||
<NotificationID> ::= <String>
|
<NotificationID> ::= <String>
|
||||||
<NumberOfSeats> ::= <Number>
|
<NumberOfSeats> ::= <Number>
|
||||||
@ -182,6 +181,7 @@ Named items
|
|||||||
<QueryCrOS> ::= <String> See: https://support.google.com/chrome/a/answer/1698333?hl=en
|
<QueryCrOS> ::= <String> See: https://support.google.com/chrome/a/answer/1698333?hl=en
|
||||||
<QueryDriveFile> ::= <String> See: https://developers.google.com/drive/v2/web/search-parameters
|
<QueryDriveFile> ::= <String> See: https://developers.google.com/drive/v2/web/search-parameters
|
||||||
<QueryGmail> ::= <String> See: https://support.google.com/mail/answer/7190
|
<QueryGmail> ::= <String> See: https://support.google.com/mail/answer/7190
|
||||||
|
<QueryGroup> ::= <String> See: https://developers.google.com/admin-sdk/directory/v1/guides/search-groups
|
||||||
<QueryMobile> ::= <String> See: https://support.google.com/a/answer/1408863?hl=en#search
|
<QueryMobile> ::= <String> See: https://support.google.com/a/answer/1408863?hl=en#search
|
||||||
<QueryPrinter> ::= <String> See: https://developers.google.com/cloud-print/docs/appInterfaces#search
|
<QueryPrinter> ::= <String> See: https://developers.google.com/cloud-print/docs/appInterfaces#search
|
||||||
<QueryPrintJob> ::= <String> See: https://developers.google.com/cloud-print/docs/appInterfaces#parameters_3
|
<QueryPrintJob> ::= <String> See: https://developers.google.com/cloud-print/docs/appInterfaces#parameters_3
|
||||||
@ -400,7 +400,6 @@ Named items
|
|||||||
unknownsourcesstatus|
|
unknownsourcesstatus|
|
||||||
useragent|
|
useragent|
|
||||||
wifimacaddress
|
wifimacaddress
|
||||||
|
|
||||||
<MobileFieldNameList> ::= "<MobileFieldName>(,<MobileFieldName>)*"
|
<MobileFieldNameList> ::= "<MobileFieldName>(,<MobileFieldName>)*"
|
||||||
|
|
||||||
<MobileOrderByFieldName> ::=
|
<MobileOrderByFieldName> ::=
|
||||||
@ -408,6 +407,7 @@ Named items
|
|||||||
|
|
||||||
<OrgUnitFieldName> ::=
|
<OrgUnitFieldName> ::=
|
||||||
description|id|inherit|name|orgunitpath|parent|parentid|inherit
|
description|id|inherit|name|orgunitpath|parent|parentid|inherit
|
||||||
|
<OrgUnitFieldNameList> ::= "<OrgUnitFieldName>(,<OrgUnitFieldName>)*"
|
||||||
|
|
||||||
<PrintJobOrderByFieldName> ::=
|
<PrintJobOrderByFieldName> ::=
|
||||||
create_time|status|title
|
create_time|status|title
|
||||||
@ -430,6 +430,7 @@ Named items
|
|||||||
<UserFieldName> ::=
|
<UserFieldName> ::=
|
||||||
addresses|address|
|
addresses|address|
|
||||||
agreedtoterms|agreed2terms|
|
agreedtoterms|agreed2terms|
|
||||||
|
aliases|
|
||||||
changepasswordatnextlogin|changepassword|
|
changepasswordatnextlogin|changepassword|
|
||||||
creationtime|
|
creationtime|
|
||||||
deletiontime|
|
deletiontime|
|
||||||
@ -509,6 +510,10 @@ Items, separated by spaces, with spaces, commas or single quotes in the items th
|
|||||||
<PrinterIDList> ::= "<PrinterID>(,<PrinterID>)*"
|
<PrinterIDList> ::= "<PrinterID>(,<PrinterID>)*"
|
||||||
<ProductIDList> ::= "(<ProductID>|SKUID>)(,<ProductID>|SKUID>)*"
|
<ProductIDList> ::= "(<ProductID>|SKUID>)(,<ProductID>|SKUID>)*"
|
||||||
<PrintJobIDList> ::= "<PrintJobID>(,<PrintJobID>)*"
|
<PrintJobIDList> ::= "<PrintJobID>(,<PrintJobID>)*"
|
||||||
|
<QueryCrOSList> ::= "<QueryCrOS>(,<QueryCrOS>)*"
|
||||||
|
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
||||||
|
<QueryPrinterList> ::= "<QueryPrinter>(,<QueryPrinter>)*"
|
||||||
|
<QueryUserList> ::= "<QueryUser>(,<QueryUser>)*"
|
||||||
<ResourceIDList> ::= "<ResourceID>(,<ResourceID>)*"
|
<ResourceIDList> ::= "<ResourceID>(,<ResourceID>)*"
|
||||||
<SKUIDList> ="<SKUID>(,<SKUID>)*"
|
<SKUIDList> ="<SKUID>(,<SKUID>)*"
|
||||||
<SchemaNameList> ::= "<SchemaName>(,<SchemaName>)*"
|
<SchemaNameList> ::= "<SchemaName>(,<SchemaName>)*"
|
||||||
@ -519,6 +524,10 @@ Specify a collection of ChromeOS devices by directly specifying them
|
|||||||
<CrOSTypeEntity> ::=
|
<CrOSTypeEntity> ::=
|
||||||
(all cros)|
|
(all cros)|
|
||||||
(cros <CrOSList>)|
|
(cros <CrOSList>)|
|
||||||
|
(crosfile <FileName>)|
|
||||||
|
(croscsvfile <FileName>:<FieldName>)|
|
||||||
|
(crosquery <QueryCrOS>)|
|
||||||
|
(crosqueries <QueryCrOSList>)
|
||||||
Specify a collection of Users by directly specifying them or by specifiying items that will yield a list of users
|
Specify a collection of Users by directly specifying them or by specifiying items that will yield a list of users
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users)|
|
(all users)|
|
||||||
@ -533,7 +542,8 @@ Specify a collection of Users by directly specifying them or by specifiying item
|
|||||||
(file <FileName>)|
|
(file <FileName>)|
|
||||||
(csvfile <FileName>:<FieldName>)|
|
(csvfile <FileName>:<FieldName>)|
|
||||||
(license|licenses|licence|licences <SKUIDList>)|
|
(license|licenses|licence|licences <SKUIDList>)|
|
||||||
(query <QueryUser>)
|
(query <QueryUser>)|
|
||||||
|
(queries <QueryUserList>)
|
||||||
|
|
||||||
Item attributes
|
Item attributes
|
||||||
<BuildingAttributes> ::=
|
<BuildingAttributes> ::=
|
||||||
@ -800,13 +810,13 @@ gam update org|ou <OrgUnitPath> [name <Name>] [description <String>] [parent <Or
|
|||||||
gam update org|ou <OrgUnitPath> add|move <CrOSTypeEntity>|<UserTypeEntity>
|
gam update org|ou <OrgUnitPath> add|move <CrOSTypeEntity>|<UserTypeEntity>
|
||||||
gam delete org|ou <OrgUnitPath>
|
gam delete org|ou <OrgUnitPath>
|
||||||
gam info org|ou <OrgUnitPath> [nousers] [children|child]
|
gam info org|ou <OrgUnitPath> [nousers] [children|child]
|
||||||
gam print orgs|ous [todrive] [toplevelonly] [from_parent <OrgUnitPath>] [allfields|<OrgUnitFieldName>*]
|
gam print orgs|ous [todrive] [toplevelonly] [from_parent <OrgUnitPath>] [allfields|(fields <OrgUnitFieldNameKist>)]
|
||||||
|
|
||||||
gam create alias|nickname <EmailAddress> user|group|target <UniqueID>|<EmailAddress>
|
gam create alias|nickname <EmailAddress> user|group|target <UniqueID>|<EmailAddress>
|
||||||
gam update alias|nickname <EmailAddress> user|group|target <UniqueID>|<EmailAddress>
|
gam update alias|nickname <EmailAddress> user|group|target <UniqueID>|<EmailAddress>
|
||||||
gam delete alias|nickname [user|group|target] <UniqueID>|<EmailAddress>
|
gam delete alias|nickname [user|group|target] <UniqueID>|<EmailAddress>
|
||||||
gam info alias|nickname <EmailAddress>
|
gam info alias|nickname <EmailAddress>
|
||||||
gam print aliases|nicknames [todrive] [shownoneditable] [nogroups] [nousers] [query <QueryUser>]
|
gam print aliases|nicknames [todrive] [shownoneditable] [nogroups] [nousers] [(query <QueryUser>)|(queries <QueryUserList)]
|
||||||
|
|
||||||
gam calendar <CalendarItem> add <CalendarACLRole> ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default
|
gam calendar <CalendarItem> add <CalendarACLRole> ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default
|
||||||
gam calendar <CalendarItem> update <CalendarACLRole> ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default
|
gam calendar <CalendarItem> update <CalendarACLRole> ([user] <EmailAddress>)|(group <EmailAddress>)|(domain [<DomainName>])|default
|
||||||
@ -817,11 +827,19 @@ gam calendar <CalendarItem> addevent <EventAttributes>+
|
|||||||
gam calendar <CalendarItem> deleteevent (id|eventid <EventID>)* (query|eventquery <QueryCalendar>)* [doit] [notifyattendees]
|
gam calendar <CalendarItem> deleteevent (id|eventid <EventID>)* (query|eventquery <QueryCalendar>)* [doit] [notifyattendees]
|
||||||
gam calendar <CalendarItem> wipe
|
gam calendar <CalendarItem> wipe
|
||||||
|
|
||||||
|
<CalendarSettings> ::=
|
||||||
|
summary <String>|
|
||||||
|
description <String>|
|
||||||
|
location <String>|
|
||||||
|
timezone <String>
|
||||||
|
|
||||||
|
gam calendar <CalendarItem> modify <CalendarSettings>+
|
||||||
|
|
||||||
gam update cros <CrOSItem> (<CrOSAttributes>+)|(action deprovision_same_model_replace|deprovision_different_model_replace|deprovision_retiring_device|disable|reenable [acknowledge_device_touch_requirement])
|
gam update cros <CrOSItem> (<CrOSAttributes>+)|(action deprovision_same_model_replace|deprovision_different_model_replace|deprovision_retiring_device|disable|reenable [acknowledge_device_touch_requirement])
|
||||||
gam info cros <CrOSItem> [nolists] [listlimit <Number>] [start <Date>] [end <Date>]
|
gam info cros <CrOSItem> [nolists] [listlimit <Number>] [start <Date>] [end <Date>]
|
||||||
[basic|full|allfields] <CrOSFieldName>* [fields <CrOSFieldNameList>] [downloadfile latest|<Time>] [targetfolder <FilePath>]
|
[basic|full|allfields] <CrOSFieldName>* [fields <CrOSFieldNameList>] [downloadfile latest|<Time>] [targetfolder <FilePath>]
|
||||||
|
|
||||||
gam print cros [todrive] [query <QueryCrOS>] [limittoou <OrgUnitItem>]
|
gam print cros [todrive] [(query <QueryCrOS>)|(queries <QueryCrOSList>)] [limittoou <OrgUnitItem>]
|
||||||
[orderby <CrOSOrderByFieldName> [ascending|descending]] [nolists|recentusers|timeranges|devicefiles] [listlimit <Number>] [start <Date>] [end <Date>]
|
[orderby <CrOSOrderByFieldName> [ascending|descending]] [nolists|recentusers|timeranges|devicefiles] [listlimit <Number>] [start <Date>] [end <Date>]
|
||||||
[basic|full|allfields] <CrOSFieldName>* [fields <CrOSFieldNameList>]
|
[basic|full|allfields] <CrOSFieldName>* [fields <CrOSFieldNameList>]
|
||||||
gam <CrOSTypeEntity> print
|
gam <CrOSTypeEntity> print
|
||||||
@ -851,7 +869,7 @@ with all of the other headers.
|
|||||||
The listlimit <Number> argument limits the number of repetitions to <Number>; if not specified or <Number> equals zero, there is no limit.
|
The listlimit <Number> argument limits the number of repetitions to <Number>; if not specified or <Number> equals zero, there is no limit.
|
||||||
The start <Date> and end <Date> arguments filter the time ranges.
|
The start <Date> and end <Date> arguments filter the time ranges.
|
||||||
|
|
||||||
gam print crosactivity [todrive] [query <QueryCrOS>] [limittoou <OrgUnitItem>]
|
gam print crosactivity [todrive] [(query <QueryCrOS>)|(queries <QueryCrOSList>)] [limittoou <OrgUnitItem>]
|
||||||
[recentusers] [timeranges] [both] [devicefiles] [all] [listlimit <Number>] [start <Date>] [end <Date>] [delimiter <Character>]
|
[recentusers] [timeranges] [both] [devicefiles] [all] [listlimit <Number>] [start <Date>] [end <Date>] [delimiter <Character>]
|
||||||
|
|
||||||
The basic column headers are: deviceId,annotatedAssetId,annotatedLocation,serialNumber,orgUnitPath.
|
The basic column headers are: deviceId,annotatedAssetId,annotatedLocation,serialNumber,orgUnitPath.
|
||||||
@ -873,10 +891,10 @@ The listlimit <Number> argument limits the number of recent users, time ranges a
|
|||||||
The start <Date> and end <Date> arguments filter the time ranges.
|
The start <Date> and end <Date> arguments filter the time ranges.
|
||||||
Delimiter defaults to comma.
|
Delimiter defaults to comma.
|
||||||
|
|
||||||
gam update mobile <MobileItem> action <MobileAction>
|
gam update mobile <MobileID> action <MobileAction>
|
||||||
gam delete mobile <MobileItem>
|
gam delete mobile <MobileID>
|
||||||
gam info mobile <MobileItem>
|
gam info mobile <MobileID>
|
||||||
gam print mobile [todrive] [query <QueryMobile>] [basic|full] [orderby <MobileOrderByFieldName> [ascending|descending]]
|
gam print mobile [todrive] [(query <QueryMobile>)|(queries <QueryMobileList>)] [basic|full] [orderby <MobileOrderByFieldName> [ascending|descending]]
|
||||||
fields <MobileFieldNameList>] [delimiter <Character>] [appslimit <Number>] [listlimit <Number>]
|
fields <MobileFieldNameList>] [delimiter <Character>] [appslimit <Number>] [listlimit <Number>]
|
||||||
|
|
||||||
gam create group <EmailAddress> <GroupAttributes>*
|
gam create group <EmailAddress> <GroupAttributes>*
|
||||||
@ -933,7 +951,7 @@ gam delete user <UserItem>
|
|||||||
gam undelete user <UserItem> [org|ou <OrgUnitPath>]
|
gam undelete user <UserItem> [org|ou <OrgUnitPath>]
|
||||||
gam info user [<UserItem>] [noaliases] [nogroups] [nolicenses|nolicences] [noschemas] [schemas|custom <SchemaNameList>] [userview] [skus|sku <SKUIDList>]
|
gam info user [<UserItem>] [noaliases] [nogroups] [nolicenses|nolicences] [noschemas] [schemas|custom <SchemaNameList>] [userview] [skus|sku <SKUIDList>]
|
||||||
|
|
||||||
gam print users [todrive] ([domain <DomainName>] [query <QueryUser>] [deleted_only|only_deleted])
|
gam print users [todrive] ([domain <DomainName>] [(query <QueryUser>)|(queries <QueryUserList>)] [deleted_only|only_deleted])
|
||||||
[groups] [license|licenses|licence|licences] [emailpart|emailparts|username]
|
[groups] [license|licenses|licence|licences] [emailpart|emailparts|username]
|
||||||
[orderby <UserOrderByFieldName> [ascending|descending]] [userview]
|
[orderby <UserOrderByFieldName> [ascending|descending]] [userview]
|
||||||
[allfields|basic|full | ((<UserFieldName>* | fields <UserFieldNameList>) [schemas|custom all|<SchemaNameList>])]
|
[allfields|basic|full | ((<UserFieldName>* | fields <UserFieldNameList>) [schemas|custom all|<SchemaNameList>])]
|
||||||
@ -973,7 +991,7 @@ gam cancel guardianinvitation|guardianinvitations <GuardianInvitationID> <Studen
|
|||||||
gam update printer <PrinterID> <PrinterAttributes>+
|
gam update printer <PrinterID> <PrinterAttributes>+
|
||||||
gam delete printer <PrinterID>
|
gam delete printer <PrinterID>
|
||||||
gam info printer <PrinterID> [everything]
|
gam info printer <PrinterID> [everything]
|
||||||
gam print printers [todrive] [query <QueryPrinter>] [type <String>] [status <String>] [extrafields <String>]
|
gam print printers [todrive] [(query <QueryPrinter>)|(queries <QueryPrinterList>)] [type <String>] [status <String>] [extrafields <String>]
|
||||||
|
|
||||||
gam printer <PrinterID> add user|manager|owner <EmailAddress>|[domain:]<DomainName>|public [notify]
|
gam printer <PrinterID> add user|manager|owner <EmailAddress>|[domain:]<DomainName>|public [notify]
|
||||||
gam printer <PrinterID> delete <EmailAddress>|[domain:]<DomainName>|public
|
gam printer <PrinterID> delete <EmailAddress>|[domain:]<DomainName>|public
|
||||||
@ -1053,10 +1071,10 @@ gam <UserTypeEntity> transfer drive <UserItem> [keepuser]
|
|||||||
gam <UserTypeEntity> delete|del emptydrivefolders
|
gam <UserTypeEntity> delete|del emptydrivefolders
|
||||||
gam <UserTypeEntity> empty drivetrash
|
gam <UserTypeEntity> empty drivetrash
|
||||||
|
|
||||||
gam <UserTypeEntity> create|add drivefileacl <DriveFileID> [asadmin] anyone|(user <UserItem>)|(group <GroupItem>)|(domain <DomainName>)
|
gam <UserTypeEntity> create|add drivefileacl <DriveFileID> anyone|(user <UserItem>)|(group <GroupItem>)|(domain <DomainName>) [asadmin]
|
||||||
(role <DriveFileACLRole>) [withlink|discoverable] [expires <Time>] [sendemail] [emailmessage <String>]
|
(role <DriveFileACLRole>) [withlink|discoverable] [expires <Time>] [sendemail] [emailmessage <String>]
|
||||||
gam <UserTypeEntity> update drivefileacl <DriveFileID> <PermissionID> [asadmin]
|
gam <UserTypeEntity> update drivefileacl <DriveFileID> <PermissionID> [asadmin]
|
||||||
(role <DriveFileACLRole>) [withlink|discoverable] [expires <Time>] [removeexpiration]
|
(role <DriveFileACLRole>) [expires <Time>] [removeexpiration]
|
||||||
gam <UserTypeEntity> delete|del drivefileacl <DriveFileID> <PermissionID> [asadmin]
|
gam <UserTypeEntity> delete|del drivefileacl <DriveFileID> <PermissionID> [asadmin]
|
||||||
gam <UserTypeEntity> show drivefileacl <DriveFileID> [asadmin]
|
gam <UserTypeEntity> show drivefileacl <DriveFileID> [asadmin]
|
||||||
|
|
||||||
|
237
src/gam.py
237
src/gam.py
@ -91,21 +91,17 @@ def _request_with_user_agent(request_method):
|
|||||||
if kwargs['headers'].get('user-agent'):
|
if kwargs['headers'].get('user-agent'):
|
||||||
if GAM_USER_AGENT not in kwargs['headers']['user-agent']:
|
if GAM_USER_AGENT not in kwargs['headers']['user-agent']:
|
||||||
# Save the existing user-agent header and tack on the GAM user-agent.
|
# Save the existing user-agent header and tack on the GAM user-agent.
|
||||||
kwargs['headers']['user-agent'] = '%s %s' % (
|
kwargs['headers']['user-agent'] = '%s %s' % (GAM_USER_AGENT, kwargs['headers']['user-agent'])
|
||||||
GAM_USER_AGENT, kwargs['headers']['user-agent'])
|
|
||||||
else:
|
else:
|
||||||
kwargs['headers']['user-agent'] = GAM_USER_AGENT
|
kwargs['headers']['user-agent'] = GAM_USER_AGENT
|
||||||
else:
|
else:
|
||||||
kwargs['headers'] = {'user-agent': GAM_USER_AGENT}
|
kwargs['headers'] = {'user-agent': GAM_USER_AGENT}
|
||||||
|
|
||||||
return request_method(self, *args, **kwargs)
|
return request_method(self, *args, **kwargs)
|
||||||
|
|
||||||
return wrapped_request_method
|
return wrapped_request_method
|
||||||
|
|
||||||
google_auth_httplib2.Request.__call__ = _request_with_user_agent(
|
google_auth_httplib2.Request.__call__ = _request_with_user_agent(google_auth_httplib2.Request.__call__)
|
||||||
google_auth_httplib2.Request.__call__)
|
google_auth_httplib2.AuthorizedHttp.request = _request_with_user_agent(google_auth_httplib2.AuthorizedHttp.request)
|
||||||
google_auth_httplib2.AuthorizedHttp.request = _request_with_user_agent(
|
|
||||||
google_auth_httplib2.AuthorizedHttp.request)
|
|
||||||
|
|
||||||
def showUsage():
|
def showUsage():
|
||||||
doGAMVersion(checkForArgs=False)
|
doGAMVersion(checkForArgs=False)
|
||||||
@ -158,6 +154,12 @@ def getHTTPError(responses, http_status, reason, message):
|
|||||||
return responses[reason]
|
return responses[reason]
|
||||||
return formatHTTPError(http_status, reason, message)
|
return formatHTTPError(http_status, reason, message)
|
||||||
|
|
||||||
|
def printGettingAllItems(items, query):
|
||||||
|
if query:
|
||||||
|
sys.stderr.write(u"Getting all {0} in G Suite account that match query ({1}) (may take some time on a large account)...\n".format(items, query))
|
||||||
|
else:
|
||||||
|
sys.stderr.write(u"Getting all {0} in G Suite account (may take some time on a large account)...\n".format(items))
|
||||||
|
|
||||||
def entityServiceNotApplicableWarning(entityType, entityName, i, count):
|
def entityServiceNotApplicableWarning(entityType, entityName, i, count):
|
||||||
sys.stderr.write(u'{0}: {1}, Service not applicable/Does not exist{2}'.format(entityType, entityName, currentCountNL(i, count)))
|
sys.stderr.write(u'{0}: {1}, Service not applicable/Does not exist{2}'.format(entityType, entityName, currentCountNL(i, count)))
|
||||||
|
|
||||||
@ -1276,7 +1278,7 @@ def showReport():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if fullData == 0:
|
if fullData == 0:
|
||||||
continue
|
continue
|
||||||
page_message = u'Got %%num_items%% users\n'
|
page_message = u'Got %%num_items%% Users\n'
|
||||||
usage = callGAPIpages(rep.userUsageReport(), u'get', u'usageReports', page_message=page_message, throw_reasons=[GAPI_INVALID],
|
usage = callGAPIpages(rep.userUsageReport(), u'get', u'usageReports', page_message=page_message, throw_reasons=[GAPI_INVALID],
|
||||||
date=tryDate, userKey=userKey, customerId=customerId, filters=filters, parameters=parameters)
|
date=tryDate, userKey=userKey, customerId=customerId, filters=filters, parameters=parameters)
|
||||||
break
|
break
|
||||||
@ -2535,8 +2537,8 @@ def doPrintCourses():
|
|||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print courses"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print courses"' % sys.argv[i])
|
||||||
fields = u'nextPageToken,courses({0})'.format(u','.join(set(fieldsList))) if fieldsList else None
|
fields = u'nextPageToken,courses({0})'.format(u','.join(set(fieldsList))) if fieldsList else None
|
||||||
sys.stderr.write(u'Retrieving courses for organization (may take some time for large accounts)...\n')
|
printGettingAllItems(u'Courses', None)
|
||||||
page_message = u'Got %%num_items%% courses...\n'
|
page_message = u'Got %%num_items%% Courses...\n'
|
||||||
all_courses = callGAPIpages(croom.courses(), u'list', u'courses', page_message=page_message, teacherId=teacherId, studentId=studentId, courseStates=courseStates, fields=fields)
|
all_courses = callGAPIpages(croom.courses(), u'list', u'courses', page_message=page_message, teacherId=teacherId, studentId=studentId, courseStates=courseStates, fields=fields)
|
||||||
for course in all_courses:
|
for course in all_courses:
|
||||||
for field in skipFieldsList:
|
for field in skipFieldsList:
|
||||||
@ -2558,20 +2560,20 @@ def doPrintCourses():
|
|||||||
i += 1
|
i += 1
|
||||||
courseId = course[u'id']
|
courseId = course[u'id']
|
||||||
if showAliases:
|
if showAliases:
|
||||||
alias_message = u' got %%%%num_items%%%% aliases for course %s%s' % (courseId, currentCount(i, count))
|
alias_message = u' Got %%%%num_items%%%% Aliases for course %s%s' % (courseId, currentCount(i, count))
|
||||||
course_aliases = callGAPIpages(croom.courses().aliases(), u'list', u'aliases',
|
course_aliases = callGAPIpages(croom.courses().aliases(), u'list', u'aliases',
|
||||||
page_message=alias_message,
|
page_message=alias_message,
|
||||||
courseId=courseId)
|
courseId=courseId)
|
||||||
course[u'Aliases'] = delimiter.join([alias[u'alias'][2:] for alias in course_aliases])
|
course[u'Aliases'] = delimiter.join([alias[u'alias'][2:] for alias in course_aliases])
|
||||||
if showMembers:
|
if showMembers:
|
||||||
if showMembers != u'students':
|
if showMembers != u'students':
|
||||||
teacher_message = u' got %%%%num_items%%%% teachers for course %s%s' % (courseId, currentCount(i, count))
|
teacher_message = u' Got %%%%num_items%%%% Teachers for course %s%s' % (courseId, currentCount(i, count))
|
||||||
results = callGAPIpages(croom.courses().teachers(), u'list', u'teachers',
|
results = callGAPIpages(croom.courses().teachers(), u'list', u'teachers',
|
||||||
page_message=teacher_message,
|
page_message=teacher_message,
|
||||||
courseId=courseId, fields=teachersFields)
|
courseId=courseId, fields=teachersFields)
|
||||||
_saveParticipants(course, results, u'teachers')
|
_saveParticipants(course, results, u'teachers')
|
||||||
if showMembers != u'teachers':
|
if showMembers != u'teachers':
|
||||||
student_message = u' got %%%%num_items%%%% students for course %s%s' % (courseId, currentCount(i, count))
|
student_message = u' Got %%%%num_items%%%% Students for course %s%s' % (courseId, currentCount(i, count))
|
||||||
results = callGAPIpages(croom.courses().students(), u'list', u'students',
|
results = callGAPIpages(croom.courses().students(), u'list', u'students',
|
||||||
page_message=student_message,
|
page_message=student_message,
|
||||||
courseId=courseId, fields=studentsFields)
|
courseId=courseId, fields=studentsFields)
|
||||||
@ -2615,8 +2617,8 @@ def doPrintCourseParticipants():
|
|||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print course-participants"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print course-participants"' % sys.argv[i])
|
||||||
if len(courses) == 0:
|
if len(courses) == 0:
|
||||||
sys.stderr.write(u'Retrieving courses for organization (may take some time for large accounts)...\n')
|
printGettingAllItems(u'Courses', None)
|
||||||
page_message = u'Got %%num_items%% courses...\n'
|
page_message = u'Got %%num_items%% Courses...\n'
|
||||||
all_courses = callGAPIpages(croom.courses(), u'list', u'courses', page_message=page_message,
|
all_courses = callGAPIpages(croom.courses(), u'list', u'courses', page_message=page_message,
|
||||||
teacherId=teacherId, studentId=studentId, courseStates=courseStates, fields=u'nextPageToken,courses(id,name)')
|
teacherId=teacherId, studentId=studentId, courseStates=courseStates, fields=u'nextPageToken,courses(id,name)')
|
||||||
else:
|
else:
|
||||||
@ -2629,12 +2631,12 @@ def doPrintCourseParticipants():
|
|||||||
i += 1
|
i += 1
|
||||||
courseId = course[u'id']
|
courseId = course[u'id']
|
||||||
if showMembers != u'students':
|
if showMembers != u'students':
|
||||||
page_message = u' got %%%%num_items%%%% teachers for course %s (%s/%s)' % (courseId, i, count)
|
page_message = u' Got %%%%num_items%%%% Teachers for course %s (%s/%s)' % (courseId, i, count)
|
||||||
teachers = callGAPIpages(croom.courses().teachers(), u'list', u'teachers', page_message=page_message, courseId=courseId)
|
teachers = callGAPIpages(croom.courses().teachers(), u'list', u'teachers', page_message=page_message, courseId=courseId)
|
||||||
for teacher in teachers:
|
for teacher in teachers:
|
||||||
addRowTitlesToCSVfile(flatten_json(teacher, flattened={u'courseId': courseId, u'courseName': course[u'name'], u'userRole': u'TEACHER'}), csvRows, titles)
|
addRowTitlesToCSVfile(flatten_json(teacher, flattened={u'courseId': courseId, u'courseName': course[u'name'], u'userRole': u'TEACHER'}), csvRows, titles)
|
||||||
if showMembers != u'teachers':
|
if showMembers != u'teachers':
|
||||||
page_message = u' got %%%%num_items%%%% students for course %s (%s/%s)' % (courseId, i, count)
|
page_message = u' Got %%%%num_items%%%% Students for course %s (%s/%s)' % (courseId, i, count)
|
||||||
students = callGAPIpages(croom.courses().students(), u'list', u'students', page_message=page_message, courseId=courseId)
|
students = callGAPIpages(croom.courses().students(), u'list', u'students', page_message=page_message, courseId=courseId)
|
||||||
for student in students:
|
for student in students:
|
||||||
addRowTitlesToCSVfile(flatten_json(student, flattened={u'courseId': courseId, u'courseName': course[u'name'], u'userRole': u'STUDENT'}), csvRows, titles)
|
addRowTitlesToCSVfile(flatten_json(student, flattened={u'courseId': courseId, u'courseName': course[u'name'], u'userRole': u'STUDENT'}), csvRows, titles)
|
||||||
@ -2767,15 +2769,15 @@ def doPrintPrinters():
|
|||||||
todrive = False
|
todrive = False
|
||||||
titles = [u'id',]
|
titles = [u'id',]
|
||||||
csvRows = []
|
csvRows = []
|
||||||
query = None
|
queries = [None]
|
||||||
printer_type = None
|
printer_type = None
|
||||||
connection_status = None
|
connection_status = None
|
||||||
extra_fields = None
|
extra_fields = None
|
||||||
i = 3
|
i = 3
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
myarg = sys.argv[i].lower().replace(u'_', u'')
|
myarg = sys.argv[i].lower().replace(u'_', u'')
|
||||||
if myarg == u'query':
|
if myarg in [u'query', u'queries']:
|
||||||
query = sys.argv[i+1]
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'type':
|
elif myarg == u'type':
|
||||||
printer_type = sys.argv[i+1]
|
printer_type = sys.argv[i+1]
|
||||||
@ -2791,6 +2793,7 @@ def doPrintPrinters():
|
|||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print printers"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print printers"' % sys.argv[i])
|
||||||
|
for query in queries:
|
||||||
printers = callGAPI(cp.printers(), u'list', q=query, type=printer_type, connection_status=connection_status, extra_fields=extra_fields)
|
printers = callGAPI(cp.printers(), u'list', q=query, type=printer_type, connection_status=connection_status, extra_fields=extra_fields)
|
||||||
checkCloudPrintResult(printers)
|
checkCloudPrintResult(printers)
|
||||||
for printer in printers[u'printers']:
|
for printer in printers[u'printers']:
|
||||||
@ -3883,7 +3886,7 @@ def printDriveActivity(users):
|
|||||||
user, activity = buildActivityGAPIObject(user)
|
user, activity = buildActivityGAPIObject(user)
|
||||||
if not activity:
|
if not activity:
|
||||||
continue
|
continue
|
||||||
page_message = u'Retrieved %%%%total_items%%%% activities for %s' % user
|
page_message = u'Got %%%%total_items%%%% activities for %s' % user
|
||||||
feed = callGAPIpages(activity.activities(), u'list', u'activities',
|
feed = callGAPIpages(activity.activities(), u'list', u'activities',
|
||||||
page_message=page_message, source=u'drive.google.com', userId=u'me',
|
page_message=page_message, source=u'drive.google.com', userId=u'me',
|
||||||
drive_ancestorId=drive_ancestorId, groupingStrategy=u'none',
|
drive_ancestorId=drive_ancestorId, groupingStrategy=u'none',
|
||||||
@ -4158,7 +4161,7 @@ def printDriveFileList(users):
|
|||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
sys.stderr.write(u'Getting files for %s...\n' % user)
|
sys.stderr.write(u'Getting files for %s...\n' % user)
|
||||||
page_message = u' got %%%%total_items%%%% files for %s...\n' % user
|
page_message = u' Got %%%%total_items%%%% files for %s...\n' % user
|
||||||
feed = callGAPIpages(drive.files(), u'list', u'items',
|
feed = callGAPIpages(drive.files(), u'list', u'items',
|
||||||
page_message=page_message, soft_errors=True,
|
page_message=page_message, soft_errors=True,
|
||||||
q=query, orderBy=orderBy, fields=fields, maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
q=query, orderBy=orderBy, fields=fields, maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
||||||
@ -4209,7 +4212,7 @@ def printDriveFileList(users):
|
|||||||
|
|
||||||
def doDriveSearch(drive, query=None):
|
def doDriveSearch(drive, query=None):
|
||||||
print u'Searching for files with query: "%s"...' % query
|
print u'Searching for files with query: "%s"...' % query
|
||||||
page_message = u' got %%total_items%% files...\n'
|
page_message = u' Got %%total_items%% files...\n'
|
||||||
files = callGAPIpages(drive.files(), u'list', u'items',
|
files = callGAPIpages(drive.files(), u'list', u'items',
|
||||||
page_message=page_message,
|
page_message=page_message,
|
||||||
q=query, fields=u'nextPageToken,items(id)', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
q=query, fields=u'nextPageToken,items(id)', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
||||||
@ -4317,7 +4320,7 @@ def showDriveFileTree(users):
|
|||||||
continue
|
continue
|
||||||
root_folder = callGAPI(drive.about(), u'get', fields=u'rootFolderId')[u'rootFolderId']
|
root_folder = callGAPI(drive.about(), u'get', fields=u'rootFolderId')[u'rootFolderId']
|
||||||
sys.stderr.write(u'Getting all files for %s...\n' % user)
|
sys.stderr.write(u'Getting all files for %s...\n' % user)
|
||||||
page_message = u' got %%%%total_items%%%% files for %s...\n' % user
|
page_message = u' Got %%%%total_items%%%% files for %s...\n' % user
|
||||||
feed = callGAPIpages(drive.files(), u'list', u'items', page_message=page_message,
|
feed = callGAPIpages(drive.files(), u'list', u'items', page_message=page_message,
|
||||||
q=query, orderBy=orderBy, fields=u'items(id,title,parents(id),mimeType),nextPageToken', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
q=query, orderBy=orderBy, fields=u'items(id,title,parents(id),mimeType),nextPageToken', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
||||||
printDriveFolderContents(feed, root_folder, 0)
|
printDriveFolderContents(feed, root_folder, 0)
|
||||||
@ -4331,7 +4334,7 @@ def deleteEmptyDriveFolders(users):
|
|||||||
deleted_empty = True
|
deleted_empty = True
|
||||||
while deleted_empty:
|
while deleted_empty:
|
||||||
sys.stderr.write(u'Getting folders for %s...\n' % user)
|
sys.stderr.write(u'Getting folders for %s...\n' % user)
|
||||||
page_message = u' got %%%%total_items%%%% folders for %s...\n' % user
|
page_message = u' Got %%%%total_items%%%% folders for %s...\n' % user
|
||||||
feed = callGAPIpages(drive.files(), u'list', u'items', page_message=page_message,
|
feed = callGAPIpages(drive.files(), u'list', u'items', page_message=page_message,
|
||||||
q=query, fields=u'items(title,id),nextPageToken', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
q=query, fields=u'items(title,id),nextPageToken', maxResults=GC_Values[GC_DRIVE_MAX_RESULTS])
|
||||||
deleted_empty = False
|
deleted_empty = False
|
||||||
@ -4750,7 +4753,7 @@ def transferDriveFiles(users):
|
|||||||
source_root = source_about[u'rootFolderId']
|
source_root = source_about[u'rootFolderId']
|
||||||
source_permissionid = source_about[u'permissionId']
|
source_permissionid = source_about[u'permissionId']
|
||||||
print u"Getting file list for source user: %s..." % user
|
print u"Getting file list for source user: %s..." % user
|
||||||
page_message = u' got %%total_items%% files\n'
|
page_message = u' Got %%total_items%% files\n'
|
||||||
source_drive_files = callGAPIpages(source_drive.files(), u'list', u'items', page_message=page_message,
|
source_drive_files = callGAPIpages(source_drive.files(), u'list', u'items', page_message=page_message,
|
||||||
q=u"'me' in owners and trashed = false", fields=u'items(id,parents,mimeType),nextPageToken')
|
q=u"'me' in owners and trashed = false", fields=u'items(id,parents,mimeType),nextPageToken')
|
||||||
all_source_file_ids = []
|
all_source_file_ids = []
|
||||||
@ -4758,7 +4761,7 @@ def transferDriveFiles(users):
|
|||||||
all_source_file_ids.append(source_drive_file[u'id'])
|
all_source_file_ids.append(source_drive_file[u'id'])
|
||||||
total_count = len(source_drive_files)
|
total_count = len(source_drive_files)
|
||||||
print u"Getting folder list for target user: %s..." % target_user
|
print u"Getting folder list for target user: %s..." % target_user
|
||||||
page_message = u' got %%total_items%% folders\n'
|
page_message = u' Got %%total_items%% folders\n'
|
||||||
target_folders = callGAPIpages(target_drive.files(), u'list', u'items', page_message=page_message,
|
target_folders = callGAPIpages(target_drive.files(), u'list', u'items', page_message=page_message,
|
||||||
q=u"'me' in owners and mimeType = 'application/vnd.google-apps.folder'", fields=u'items(id,title),nextPageToken')
|
q=u"'me' in owners and mimeType = 'application/vnd.google-apps.folder'", fields=u'items(id,title),nextPageToken')
|
||||||
got_top_folder = False
|
got_top_folder = False
|
||||||
@ -8446,7 +8449,7 @@ def doUpdateOrg():
|
|||||||
users = getUsersToModify(entity_type=sys.argv[5].lower(), entity=sys.argv[6])
|
users = getUsersToModify(entity_type=sys.argv[5].lower(), entity=sys.argv[6])
|
||||||
else:
|
else:
|
||||||
users = getUsersToModify(entity_type=u'user', entity=sys.argv[5])
|
users = getUsersToModify(entity_type=u'user', entity=sys.argv[5])
|
||||||
if (sys.argv[5].lower() == u'cros') or ((sys.argv[5].lower() == u'all') and (sys.argv[6].lower() == u'cros')):
|
if (sys.argv[5].lower().startswith(u'cros')) or ((sys.argv[5].lower() == u'all') and (sys.argv[6].lower() == u'cros')):
|
||||||
for l in range(0, len(users), 50):
|
for l in range(0, len(users), 50):
|
||||||
move_body = {u'deviceIds': users[l:l+50]}
|
move_body = {u'deviceIds': users[l:l+50]}
|
||||||
print u' moving %s devices to %s' % (len(move_body[u'deviceIds']), orgUnitPath)
|
print u' moving %s devices to %s' % (len(move_body[u'deviceIds']), orgUnitPath)
|
||||||
@ -9512,7 +9515,7 @@ def doGetOrgInfo(name=None, return_attrib=None):
|
|||||||
if get_users:
|
if get_users:
|
||||||
name = result[u'orgUnitPath']
|
name = result[u'orgUnitPath']
|
||||||
print u'Users: '
|
print u'Users: '
|
||||||
page_message = u'Got %%total_items%% users: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%total_items%% Users: %%first_item%% - %%last_item%%\n'
|
||||||
users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
message_attribute=u'primaryEmail', customer=GC_Values[GC_CUSTOMER_ID], query=orgUnitPathQuery(name),
|
message_attribute=u'primaryEmail', customer=GC_Values[GC_CUSTOMER_ID], query=orgUnitPathQuery(name),
|
||||||
fields=u'users(primaryEmail,orgUnitPath),nextPageToken', maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
fields=u'users(primaryEmail,orgUnitPath),nextPageToken', maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
@ -10039,7 +10042,7 @@ def doPrintUsers():
|
|||||||
addFieldToCSVfile(u'primaryemail', USER_ARGUMENT_TO_PROPERTY_MAP, fieldsList, fieldsTitles, titles)
|
addFieldToCSVfile(u'primaryemail', USER_ARGUMENT_TO_PROPERTY_MAP, fieldsList, fieldsTitles, titles)
|
||||||
customer = GC_Values[GC_CUSTOMER_ID]
|
customer = GC_Values[GC_CUSTOMER_ID]
|
||||||
domain = None
|
domain = None
|
||||||
query = None
|
queries = [None]
|
||||||
projection = u'basic'
|
projection = u'basic'
|
||||||
customFieldMask = None
|
customFieldMask = None
|
||||||
sortHeaders = getGroupFeed = getLicenseFeed = email_parts = False
|
sortHeaders = getGroupFeed = getLicenseFeed = email_parts = False
|
||||||
@ -10098,8 +10101,8 @@ def doPrintUsers():
|
|||||||
domain = sys.argv[i+1]
|
domain = sys.argv[i+1]
|
||||||
customer = None
|
customer = None
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'query':
|
elif myarg in [u'query', u'queries']:
|
||||||
query = sys.argv[i+1]
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg in USER_ARGUMENT_TO_PROPERTY_MAP:
|
elif myarg in USER_ARGUMENT_TO_PROPERTY_MAP:
|
||||||
if not fieldsList:
|
if not fieldsList:
|
||||||
@ -10131,8 +10134,9 @@ def doPrintUsers():
|
|||||||
fields = u'nextPageToken,users(%s)' % u','.join(set(fieldsList)).replace(u'.', u'/')
|
fields = u'nextPageToken,users(%s)' % u','.join(set(fieldsList)).replace(u'.', u'/')
|
||||||
else:
|
else:
|
||||||
fields = None
|
fields = None
|
||||||
sys.stderr.write(u"Getting all users in G Suite account (may take some time on a large account)...\n")
|
for query in queries:
|
||||||
page_message = u'Got %%total_items%% users: %%first_item%% - %%last_item%%\n'
|
printGettingAllItems(u'Users', query)
|
||||||
|
page_message = u'Got %%total_items%% Users: %%first_item%% - %%last_item%%\n'
|
||||||
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
message_attribute=u'primaryEmail', customer=customer, domain=domain, fields=fields,
|
message_attribute=u'primaryEmail', customer=customer, domain=domain, fields=fields,
|
||||||
showDeleted=deleted_only, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
showDeleted=deleted_only, orderBy=orderBy, sortOrder=sortOrder, viewType=viewType,
|
||||||
@ -10313,8 +10317,8 @@ def doPrintGroups():
|
|||||||
addTitlesToCSVfile([u'OwnersCount',], titles)
|
addTitlesToCSVfile([u'OwnersCount',], titles)
|
||||||
if not ownersCountOnly:
|
if not ownersCountOnly:
|
||||||
addTitlesToCSVfile([u'Owners',], titles)
|
addTitlesToCSVfile([u'Owners',], titles)
|
||||||
sys.stderr.write(u"Retrieving All Groups for G Suite account (may take some time on a large account)...\n")
|
printGettingAllItems(u'Groups', None)
|
||||||
page_message = u'Got %%num_items%% groups: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%num_items%% Groups: %%first_item%% - %%last_item%%\n'
|
||||||
entityList = callGAPIpages(cd.groups(), u'list', u'groups',
|
entityList = callGAPIpages(cd.groups(), u'list', u'groups',
|
||||||
page_message=page_message, message_attribute=u'email',
|
page_message=page_message, message_attribute=u'email',
|
||||||
customer=customer, domain=usedomain, userKey=usemember,
|
customer=customer, domain=usedomain, userKey=usemember,
|
||||||
@ -10446,7 +10450,7 @@ def doPrintOrgs():
|
|||||||
i += 2
|
i += 2
|
||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print orgs"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print orgs"' % sys.argv[i])
|
||||||
sys.stderr.write(u"Retrieving All Organizational Units for your account (may take some time on large domain)...\n")
|
printGettingAllItems(u'Organizational Units', None)
|
||||||
if fields:
|
if fields:
|
||||||
get_fields = u','.join(fields)
|
get_fields = u','.join(fields)
|
||||||
list_fields = u'organizationUnits(%s)' % get_fields
|
list_fields = u'organizationUnits(%s)' % get_fields
|
||||||
@ -10499,7 +10503,7 @@ def doPrintAliases():
|
|||||||
userFields = [u'primaryEmail', u'aliases']
|
userFields = [u'primaryEmail', u'aliases']
|
||||||
groupFields = [u'email', u'aliases']
|
groupFields = [u'email', u'aliases']
|
||||||
doGroups = doUsers = True
|
doGroups = doUsers = True
|
||||||
query = None
|
queries = [None]
|
||||||
i = 3
|
i = 3
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
myarg = sys.argv[i].lower().replace(u'_', u'')
|
myarg = sys.argv[i].lower().replace(u'_', u'')
|
||||||
@ -10517,16 +10521,17 @@ def doPrintAliases():
|
|||||||
elif myarg == u'nousers':
|
elif myarg == u'nousers':
|
||||||
doUsers = False
|
doUsers = False
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg == u'query':
|
elif myarg in [u'query', u'queries']:
|
||||||
query = getString(i+1, u'Query')
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
doGroups = False
|
doGroups = False
|
||||||
doUsers = True
|
doUsers = True
|
||||||
i += 2
|
i += 2
|
||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print aliases"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print aliases"' % sys.argv[i])
|
||||||
if doUsers:
|
if doUsers:
|
||||||
sys.stderr.write(u"Retrieving All User Aliases for %s organization (may take some time on large domain)...\n" % GC_Values[GC_DOMAIN])
|
for query in queries:
|
||||||
page_message = u'Got %%num_items%% users %%first_item%% - %%last_item%%\n'
|
printGettingAllItems(u'User Aliases', query)
|
||||||
|
page_message = u'Got %%num_items%% Users %%first_item%% - %%last_item%%\n'
|
||||||
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
message_attribute=u'primaryEmail', customer=GC_Values[GC_CUSTOMER_ID], query=query,
|
message_attribute=u'primaryEmail', customer=GC_Values[GC_CUSTOMER_ID], query=query,
|
||||||
fields=u'nextPageToken,users({0})'.format(u','.join(userFields)), maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
fields=u'nextPageToken,users({0})'.format(u','.join(userFields)), maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
@ -10536,8 +10541,8 @@ def doPrintAliases():
|
|||||||
for alias in user.get(u'nonEditableAliases', []):
|
for alias in user.get(u'nonEditableAliases', []):
|
||||||
csvRows.append({u'NonEditableAlias': alias, u'Target': user[u'primaryEmail'], u'TargetType': u'User'})
|
csvRows.append({u'NonEditableAlias': alias, u'Target': user[u'primaryEmail'], u'TargetType': u'User'})
|
||||||
if doGroups:
|
if doGroups:
|
||||||
sys.stderr.write(u"Retrieving All Group Aliases for %s organization (may take some time on large domain)...\n" % GC_Values[GC_DOMAIN])
|
printGettingAllItems(u'Group Aliasess', None)
|
||||||
page_message = u'Got %%num_items%% groups %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%num_items%% Groups %%first_item%% - %%last_item%%\n'
|
||||||
all_groups = callGAPIpages(cd.groups(), u'list', u'groups', page_message=page_message,
|
all_groups = callGAPIpages(cd.groups(), u'list', u'groups', page_message=page_message,
|
||||||
message_attribute=u'email', customer=GC_Values[GC_CUSTOMER_ID],
|
message_attribute=u'email', customer=GC_Values[GC_CUSTOMER_ID],
|
||||||
fields=u'nextPageToken,groups({0})'.format(u','.join(groupFields)))
|
fields=u'nextPageToken,groups({0})'.format(u','.join(groupFields)))
|
||||||
@ -10664,8 +10669,8 @@ def doPrintVaultMatters():
|
|||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
systemErrorExit(3, '%s is not a valid argument to "gam print matters"' % myarg)
|
systemErrorExit(3, '%s is not a valid argument to "gam print matters"' % myarg)
|
||||||
sys.stderr.write(u'Retrieving all Vault Matters...\n')
|
printGettingAllItems(u'Vault Matters', None)
|
||||||
page_message = u' got %%num_items%% matters...\n'
|
page_message = u'Got %%num_items%% Vault Matters...\n'
|
||||||
matters = callGAPIpages(v.matters(), u'list', u'matters', page_message=page_message, view=view)
|
matters = callGAPIpages(v.matters(), u'list', u'matters', page_message=page_message, view=view)
|
||||||
for matter in matters:
|
for matter in matters:
|
||||||
addRowTitlesToCSVfile(flatten_json(matter), csvRows, titles)
|
addRowTitlesToCSVfile(flatten_json(matter), csvRows, titles)
|
||||||
@ -10714,7 +10719,8 @@ def doPrintMobileDevices():
|
|||||||
titles = []
|
titles = []
|
||||||
csvRows = []
|
csvRows = []
|
||||||
fields = None
|
fields = None
|
||||||
query = projection = orderBy = sortOrder = None
|
projection = orderBy = sortOrder = None
|
||||||
|
queries = [None]
|
||||||
delimiter = u' '
|
delimiter = u' '
|
||||||
listLimit = 1
|
listLimit = 1
|
||||||
appsLimit = -1
|
appsLimit = -1
|
||||||
@ -10724,8 +10730,8 @@ def doPrintMobileDevices():
|
|||||||
if myarg == u'todrive':
|
if myarg == u'todrive':
|
||||||
todrive = True
|
todrive = True
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg == u'query':
|
elif myarg in [u'query', u'queries']:
|
||||||
query = sys.argv[i+1]
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'delimiter':
|
elif myarg == u'delimiter':
|
||||||
delimiter = sys.argv[i+1]
|
delimiter = sys.argv[i+1]
|
||||||
@ -10757,8 +10763,9 @@ def doPrintMobileDevices():
|
|||||||
i += 1
|
i += 1
|
||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam print mobile"' % sys.argv[i])
|
systemErrorExit(2, '%s is not a valid argument for "gam print mobile"' % sys.argv[i])
|
||||||
sys.stderr.write(u'Retrieving All Mobile Devices for organization (may take some time for large accounts)...\n')
|
for query in queries:
|
||||||
page_message = u'Got %%num_items%% mobile devices...\n'
|
printGettingAllItems(u'Mobile Devices', query)
|
||||||
|
page_message = u'Got %%num_items%% Mobile Devices...\n'
|
||||||
all_mobile = callGAPIpages(cd.mobiledevices(), u'list', u'mobiledevices', page_message=page_message,
|
all_mobile = callGAPIpages(cd.mobiledevices(), u'list', u'mobiledevices', page_message=page_message,
|
||||||
customerId=GC_Values[GC_CUSTOMER_ID], query=query, projection=projection, fields=fields,
|
customerId=GC_Values[GC_CUSTOMER_ID], query=query, projection=projection, fields=fields,
|
||||||
orderBy=orderBy, sortOrder=sortOrder, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
orderBy=orderBy, sortOrder=sortOrder, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
||||||
@ -10813,12 +10820,13 @@ def doPrintCrosActivity():
|
|||||||
selectActiveTimeRanges = selectDeviceFiles = selectRecentUsers = False
|
selectActiveTimeRanges = selectDeviceFiles = selectRecentUsers = False
|
||||||
listLimit = 0
|
listLimit = 0
|
||||||
delimiter = u','
|
delimiter = u','
|
||||||
query = orgUnitPath = None
|
orgUnitPath = None
|
||||||
|
queries = [None]
|
||||||
i = 3
|
i = 3
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
myarg = sys.argv[i].lower().replace(u'_', u'')
|
myarg = sys.argv[i].lower().replace(u'_', u'')
|
||||||
if myarg == u'query':
|
if myarg in [u'query', u'queries']:
|
||||||
query = sys.argv[i+1]
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'limittoou':
|
elif myarg == u'limittoou':
|
||||||
orgUnitPath = sys.argv[i+1]
|
orgUnitPath = sys.argv[i+1]
|
||||||
@ -10867,8 +10875,9 @@ def doPrintCrosActivity():
|
|||||||
fieldsList.append(u'deviceFiles')
|
fieldsList.append(u'deviceFiles')
|
||||||
addTitlesToCSVfile([u'deviceFiles.type', u'deviceFiles.createTime'], titles)
|
addTitlesToCSVfile([u'deviceFiles.type', u'deviceFiles.createTime'], titles)
|
||||||
fields = u'chromeosdevices(%s),nextPageToken' % u','.join(fieldsList)
|
fields = u'chromeosdevices(%s),nextPageToken' % u','.join(fieldsList)
|
||||||
sys.stderr.write(u'Retrieving All Chrome OS Devices for organization (may take some time for large accounts)...\n')
|
for query in queries:
|
||||||
page_message = u'Got %%num_items%% Chrome devices...\n'
|
printGettingAllItems(u'CrOS Devices', query)
|
||||||
|
page_message = u'Got %%num_items%% CrOS devices...\n'
|
||||||
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
||||||
query=query, customerId=GC_Values[GC_CUSTOMER_ID], projection=u'FULL',
|
query=query, customerId=GC_Values[GC_CUSTOMER_ID], projection=u'FULL',
|
||||||
fields=fields, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS], orgUnitPath=orgUnitPath)
|
fields=fields, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS], orgUnitPath=orgUnitPath)
|
||||||
@ -10920,7 +10929,8 @@ def doPrintCrosDevices():
|
|||||||
csvRows = []
|
csvRows = []
|
||||||
addFieldToCSVfile(u'deviceid', CROS_ARGUMENT_TO_PROPERTY_MAP, fieldsList, fieldsTitles, titles)
|
addFieldToCSVfile(u'deviceid', CROS_ARGUMENT_TO_PROPERTY_MAP, fieldsList, fieldsTitles, titles)
|
||||||
sortHeaders = False
|
sortHeaders = False
|
||||||
query = projection = orderBy = sortOrder = orgUnitPath = None
|
projection = orderBy = sortOrder = orgUnitPath = None
|
||||||
|
queries = [None]
|
||||||
noLists = False
|
noLists = False
|
||||||
selectActiveTimeRanges = selectDeviceFiles = selectRecentUsers = False
|
selectActiveTimeRanges = selectDeviceFiles = selectRecentUsers = False
|
||||||
startDate = endDate = None
|
startDate = endDate = None
|
||||||
@ -10928,8 +10938,8 @@ def doPrintCrosDevices():
|
|||||||
i = 3
|
i = 3
|
||||||
while i < len(sys.argv):
|
while i < len(sys.argv):
|
||||||
myarg = sys.argv[i].lower().replace(u'_', u'')
|
myarg = sys.argv[i].lower().replace(u'_', u'')
|
||||||
if myarg == u'query':
|
if myarg in [u'query', u'queries']:
|
||||||
query = sys.argv[i+1]
|
queries = getQueries(myarg, sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'limittoou':
|
elif myarg == u'limittoou':
|
||||||
orgUnitPath = sys.argv[i+1]
|
orgUnitPath = sys.argv[i+1]
|
||||||
@ -11036,8 +11046,9 @@ def doPrintCrosDevices():
|
|||||||
fields = u'nextPageToken,chromeosdevices({0})'.format(u','.join(set(fieldsList))).replace(u'.', u'/')
|
fields = u'nextPageToken,chromeosdevices({0})'.format(u','.join(set(fieldsList))).replace(u'.', u'/')
|
||||||
else:
|
else:
|
||||||
fields = None
|
fields = None
|
||||||
sys.stderr.write(u'Retrieving All Chrome OS Devices for organization (may take some time for large accounts)...\n')
|
for query in queries:
|
||||||
page_message = u'Got %%num_items%% Chrome devices...\n'
|
printGettingAllItems(u'CrOS Devices', query)
|
||||||
|
page_message = u'Got %%num_items%% CrOS Devices...\n'
|
||||||
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
||||||
query=query, customerId=GC_Values[GC_CUSTOMER_ID], projection=projection, orgUnitPath=orgUnitPath,
|
query=query, customerId=GC_Values[GC_CUSTOMER_ID], projection=projection, orgUnitPath=orgUnitPath,
|
||||||
orderBy=orderBy, sortOrder=sortOrder, fields=fields, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
orderBy=orderBy, sortOrder=sortOrder, fields=fields, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
||||||
@ -11312,8 +11323,8 @@ def doPrintResourceCalendars():
|
|||||||
fields = u'nextPageToken,items({0})'.format(u','.join(set(fieldsList)))
|
fields = u'nextPageToken,items({0})'.format(u','.join(set(fieldsList)))
|
||||||
if u'buildingId' in fieldsList:
|
if u'buildingId' in fieldsList:
|
||||||
addFieldToCSVfile(u'buildingName', {u'buildingName': [u'buildingName',]}, fieldsList, fieldsTitles, titles)
|
addFieldToCSVfile(u'buildingName', {u'buildingName': [u'buildingName',]}, fieldsList, fieldsTitles, titles)
|
||||||
sys.stderr.write(u"Retrieving All Resource Calendars for your account (may take some time on a large domain)\n")
|
printGettingAllItems(u'Resource Calendars', None)
|
||||||
page_message = u'Got %%total_items%% resources: %%first_item%% - %%last_item%%\n'
|
page_message = u'Got %%total_items%% Resource Calendars: %%first_item%% - %%last_item%%\n'
|
||||||
resources = callGAPIpages(cd.resources().calendars(), u'list', u'items',
|
resources = callGAPIpages(cd.resources().calendars(), u'list', u'items',
|
||||||
page_message=page_message, message_attribute=u'resourceId',
|
page_message=page_message, message_attribute=u'resourceId',
|
||||||
customer=GC_Values[GC_CUSTOMER_ID], fields=fields)
|
customer=GC_Values[GC_CUSTOMER_ID], fields=fields)
|
||||||
@ -11330,6 +11341,19 @@ def doPrintResourceCalendars():
|
|||||||
sortCSVTitles([u'resourceId', u'resourceName', u'resourceEmail'], titles)
|
sortCSVTitles([u'resourceId', u'resourceName', u'resourceEmail'], titles)
|
||||||
writeCSVfile(csvRows, titles, u'Resources', todrive)
|
writeCSVfile(csvRows, titles, u'Resources', todrive)
|
||||||
|
|
||||||
|
def shlexSplitList(entity, dataDelimiter=u' ,'):
|
||||||
|
import shlex
|
||||||
|
lexer = shlex.shlex(entity, posix=True)
|
||||||
|
lexer.whitespace = dataDelimiter
|
||||||
|
lexer.whitespace_split = True
|
||||||
|
return list(lexer)
|
||||||
|
|
||||||
|
def getQueries(myarg, argstr):
|
||||||
|
if myarg == u'query':
|
||||||
|
return [argstr]
|
||||||
|
else:
|
||||||
|
return shlexSplitList(argstr)
|
||||||
|
|
||||||
def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=None, checkNotSuspended=False, groupUserMembersOnly=True):
|
def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=None, checkNotSuspended=False, groupUserMembersOnly=True):
|
||||||
got_uids = False
|
got_uids = False
|
||||||
if entity_type is None:
|
if entity_type is None:
|
||||||
@ -11366,55 +11390,66 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=No
|
|||||||
if ou[0] != u'/':
|
if ou[0] != u'/':
|
||||||
ou = u'/%s' % ou
|
ou = u'/%s' % ou
|
||||||
users = []
|
users = []
|
||||||
|
query = orgUnitPathQuery(ou)
|
||||||
page_message = None
|
page_message = None
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting all users in the G Suite organization (may take some time on a large domain)...\n")
|
printGettingAllItems(u'Users', query)
|
||||||
page_message = u'Got %%total_items%% users...'
|
page_message = u'Got %%total_items%% Users...'
|
||||||
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended,orgUnitPath)',
|
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended,orgUnitPath)',
|
||||||
query=orgUnitPathQuery(ou), maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
query=query, maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
for member in members:
|
for member in members:
|
||||||
if ou.lower() != member[u'orgUnitPath'].lower():
|
if ou.lower() != member[u'orgUnitPath'].lower():
|
||||||
continue
|
continue
|
||||||
if not checkNotSuspended or not member[u'suspended']:
|
if not checkNotSuspended or not member[u'suspended']:
|
||||||
users.append(member[u'primaryEmail'])
|
users.append(member[u'primaryEmail'])
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"%s users are directly in the OU.\n" % len(users))
|
sys.stderr.write(u"%s Users are directly in the OU.\n" % len(users))
|
||||||
elif entity_type in [u'ou_and_children', u'ou_and_child']:
|
elif entity_type in [u'ou_and_children', u'ou_and_child']:
|
||||||
got_uids = True
|
got_uids = True
|
||||||
ou = entity
|
ou = entity
|
||||||
if ou[0] != u'/':
|
if ou[0] != u'/':
|
||||||
ou = u'/%s' % ou
|
ou = u'/%s' % ou
|
||||||
users = []
|
users = []
|
||||||
|
query = orgUnitPathQuery(ou)
|
||||||
page_message = None
|
page_message = None
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting all users in the G Suite organization (may take some time on a large domain)...\n")
|
printGettingAllItems(u'Users', query)
|
||||||
page_message = u'Got %%total_items%% users..'
|
page_message = u'Got %%total_items%% Users...'
|
||||||
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended)',
|
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended)',
|
||||||
query=orgUnitPathQuery(ou), maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
query=query, maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
for member in members:
|
for member in members:
|
||||||
if not checkNotSuspended or not member[u'suspended']:
|
if not checkNotSuspended or not member[u'suspended']:
|
||||||
users.append(member[u'primaryEmail'])
|
users.append(member[u'primaryEmail'])
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"done.\r\n")
|
sys.stderr.write(u"done.\r\n")
|
||||||
elif entity_type in [u'query',]:
|
elif entity_type in [u'query', u'queries']:
|
||||||
|
if entity_type == u'query':
|
||||||
|
queries = [entity]
|
||||||
|
else:
|
||||||
|
queries = shlexSplitList(entity)
|
||||||
got_uids = True
|
got_uids = True
|
||||||
users = []
|
users = []
|
||||||
|
usersSet = set()
|
||||||
|
for query in queries:
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting all users that match query %s (may take some time on a large domain)...\n" % entity)
|
printGettingAllItems(u'Users', query)
|
||||||
page_message = u'Got %%total_items%% users...'
|
page_message = u'Got %%total_items%% Users...'
|
||||||
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
members = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended)',
|
customer=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,users(primaryEmail,suspended)',
|
||||||
query=entity, maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
query=query, maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
for member in members:
|
for member in members:
|
||||||
if not checkNotSuspended or not member[u'suspended']:
|
if not checkNotSuspended or not member[u'suspended']:
|
||||||
users.append(member[u'primaryEmail'])
|
email = member[u'primaryEmail']
|
||||||
|
if email not in usersSet:
|
||||||
|
usersSet.add(email)
|
||||||
|
users.append(email)
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"done.\r\n")
|
sys.stderr.write(u"done.\r\n")
|
||||||
elif entity_type in [u'license', u'licenses', u'licence', u'licences']:
|
elif entity_type in [u'license', u'licenses', u'licence', u'licences']:
|
||||||
users = doPrintLicenses(returnFields=u'userId', skus=entity.split(u','))
|
users = doPrintLicenses(returnFields=u'userId', skus=entity.split(u','))
|
||||||
elif entity_type == u'file':
|
elif entity_type in [u'file', u'crosfile']:
|
||||||
users = []
|
users = []
|
||||||
f = openFile(entity)
|
f = openFile(entity)
|
||||||
for row in f:
|
for row in f:
|
||||||
@ -11422,7 +11457,9 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=No
|
|||||||
if user:
|
if user:
|
||||||
users.append(user)
|
users.append(user)
|
||||||
closeFile(f)
|
closeFile(f)
|
||||||
elif entity_type in [u'csv', u'csvfile']:
|
if entity_type == u'crosfile':
|
||||||
|
entity = u'cros'
|
||||||
|
elif entity_type in [u'csv', u'csvfile', u'croscsv', u'croscsvfile']:
|
||||||
drive, filenameColumn = os.path.splitdrive(entity)
|
drive, filenameColumn = os.path.splitdrive(entity)
|
||||||
if filenameColumn.find(u':') == -1:
|
if filenameColumn.find(u':') == -1:
|
||||||
systemErrorExit(2, u'Expected {0} FileName:FieldName'.format(entity_type))
|
systemErrorExit(2, u'Expected {0} FileName:FieldName'.format(entity_type))
|
||||||
@ -11437,19 +11474,21 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=No
|
|||||||
if user:
|
if user:
|
||||||
users.append(user)
|
users.append(user)
|
||||||
closeFile(f)
|
closeFile(f)
|
||||||
|
if entity_type in [u'croscsv', u'croscsvfile']:
|
||||||
|
entity = u'cros'
|
||||||
elif entity_type in [u'courseparticipants', u'teachers', u'students']:
|
elif entity_type in [u'courseparticipants', u'teachers', u'students']:
|
||||||
croom = buildGAPIObject(u'classroom')
|
croom = buildGAPIObject(u'classroom')
|
||||||
users = []
|
users = []
|
||||||
entity = addCourseIdScope(entity)
|
entity = addCourseIdScope(entity)
|
||||||
if entity_type in [u'courseparticipants', u'teachers']:
|
if entity_type in [u'courseparticipants', u'teachers']:
|
||||||
page_message = u'Got %%total_items%% teachers...'
|
page_message = u'Got %%total_items%% Teachers...'
|
||||||
teachers = callGAPIpages(croom.courses().teachers(), u'list', u'teachers', page_message=page_message, courseId=entity)
|
teachers = callGAPIpages(croom.courses().teachers(), u'list', u'teachers', page_message=page_message, courseId=entity)
|
||||||
for teacher in teachers:
|
for teacher in teachers:
|
||||||
email = teacher[u'profile'].get(u'emailAddress', None)
|
email = teacher[u'profile'].get(u'emailAddress', None)
|
||||||
if email:
|
if email:
|
||||||
users.append(email)
|
users.append(email)
|
||||||
if entity_type in [u'courseparticipants', u'students']:
|
if entity_type in [u'courseparticipants', u'students']:
|
||||||
page_message = u'Got %%total_items%% students...'
|
page_message = u'Got %%total_items%% Students...'
|
||||||
students = callGAPIpages(croom.courses().students(), u'list', u'students', page_message=page_message, courseId=entity)
|
students = callGAPIpages(croom.courses().students(), u'list', u'students', page_message=page_message, courseId=entity)
|
||||||
for student in students:
|
for student in students:
|
||||||
email = student[u'profile'].get(u'emailAddress', None)
|
email = student[u'profile'].get(u'emailAddress', None)
|
||||||
@ -11458,10 +11497,11 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=No
|
|||||||
elif entity_type == u'all':
|
elif entity_type == u'all':
|
||||||
got_uids = True
|
got_uids = True
|
||||||
users = []
|
users = []
|
||||||
if entity.lower() == u'users':
|
entity = entity.lower()
|
||||||
|
if entity == u'users':
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting all users in G Suite account (may take some time on a large account)...\n")
|
printGettingAllItems(u'Users', None)
|
||||||
page_message = u'Got %%total_items%% users...'
|
page_message = u'Got %%total_items%% Users...'
|
||||||
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
all_users = callGAPIpages(cd.users(), u'list', u'users', page_message=page_message,
|
||||||
customer=GC_Values[GC_CUSTOMER_ID],
|
customer=GC_Values[GC_CUSTOMER_ID],
|
||||||
fields=u'nextPageToken,users(primaryEmail,suspended)', maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
fields=u'nextPageToken,users(primaryEmail,suspended)', maxResults=GC_Values[GC_USER_MAX_RESULTS])
|
||||||
@ -11469,22 +11509,45 @@ def getUsersToModify(entity_type=None, entity=None, silent=False, member_type=No
|
|||||||
if not member[u'suspended']:
|
if not member[u'suspended']:
|
||||||
users.append(member[u'primaryEmail'])
|
users.append(member[u'primaryEmail'])
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"done getting %s users.\r\n" % len(users))
|
sys.stderr.write(u"done getting %s Users.\r\n" % len(users))
|
||||||
elif entity.lower() == u'cros':
|
elif entity == u'cros':
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"Getting all CrOS devices in G Suite account (may take some time on a large account)...\n")
|
printGettingAllItems(u'CrOS Devices', None)
|
||||||
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices',
|
page_message = u'Got %%total_items%% CrOS Devices...'
|
||||||
|
all_cros = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
||||||
customerId=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,chromeosdevices(deviceId)',
|
customerId=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,chromeosdevices(deviceId)',
|
||||||
maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
||||||
for member in all_cros:
|
for member in all_cros:
|
||||||
users.append(member[u'deviceId'])
|
users.append(member[u'deviceId'])
|
||||||
if not silent:
|
if not silent:
|
||||||
sys.stderr.write(u"done getting %s CrOS devices.\r\n" % len(users))
|
sys.stderr.write(u"done getting %s CrOS Devices.\r\n" % len(users))
|
||||||
else:
|
else:
|
||||||
systemErrorExit(3, '%s is not a valid argument for "gam all"' % entity)
|
systemErrorExit(3, '%s is not a valid argument for "gam all"' % entity)
|
||||||
elif entity_type == u'cros':
|
elif entity_type == u'cros':
|
||||||
users = entity.replace(u',', u' ').split()
|
users = entity.replace(u',', u' ').split()
|
||||||
entity = u'cros'
|
entity = u'cros'
|
||||||
|
elif entity_type in [u'crosquery', u'crosqueries']:
|
||||||
|
if entity_type == u'crosquery':
|
||||||
|
queries = [entity]
|
||||||
|
else:
|
||||||
|
queries = shlexSplitList(entity)
|
||||||
|
users = []
|
||||||
|
usersSet = set()
|
||||||
|
for query in queries:
|
||||||
|
if not silent:
|
||||||
|
printGettingAllItems(u'CrOS Devices', query)
|
||||||
|
page_message = u'Got %%total_items%% CrOS Devices...'
|
||||||
|
members = callGAPIpages(cd.chromeosdevices(), u'list', u'chromeosdevices', page_message=page_message,
|
||||||
|
customerId=GC_Values[GC_CUSTOMER_ID], fields=u'nextPageToken,chromeosdevices(deviceId)',
|
||||||
|
query=query, maxResults=GC_Values[GC_DEVICE_MAX_RESULTS])
|
||||||
|
for member in members:
|
||||||
|
deviceId = member[u'deviceId']
|
||||||
|
if deviceId not in usersSet:
|
||||||
|
usersSet.add(deviceId)
|
||||||
|
users.append(deviceId)
|
||||||
|
if not silent:
|
||||||
|
sys.stderr.write(u"done.\r\n")
|
||||||
|
entity = u'cros'
|
||||||
else:
|
else:
|
||||||
systemErrorExit(2, '%s is not a valid argument for "gam"' % entity_type)
|
systemErrorExit(2, '%s is not a valid argument for "gam"' % entity_type)
|
||||||
full_users = list()
|
full_users = list()
|
||||||
|
@ -25,9 +25,9 @@ FALSE = u'false'
|
|||||||
true_values = [u'on', u'yes', u'enabled', u'true', u'1']
|
true_values = [u'on', u'yes', u'enabled', u'true', u'1']
|
||||||
false_values = [u'off', u'no', u'disabled', u'false', u'0']
|
false_values = [u'off', u'no', u'disabled', u'false', u'0']
|
||||||
usergroup_types = [u'user', u'users', u'group', u'ou', u'org',
|
usergroup_types = [u'user', u'users', u'group', u'ou', u'org',
|
||||||
u'ou_and_children', u'ou_and_child', u'query',
|
u'ou_and_children', u'ou_and_child', u'query', u'queries',
|
||||||
u'license', u'licenses', u'licence', u'licences', u'file', u'csv', u'csvfile', u'all',
|
u'license', u'licenses', u'licence', u'licences', u'file', u'csv', u'csvfile', u'all',
|
||||||
u'cros']
|
u'cros', u'crosquery', u'crosqueries', u'crosfile', u'croscsv', u'croscsvfile']
|
||||||
ERROR = u'ERROR'
|
ERROR = u'ERROR'
|
||||||
ERROR_PREFIX = ERROR+u': '
|
ERROR_PREFIX = ERROR+u': '
|
||||||
WARNING = u'WARNING'
|
WARNING = u'WARNING'
|
||||||
|
Reference in New Issue
Block a user