Classification labels are now available for Gmail in addition to Drive.

This commit is contained in:
Ross Scroggs
2024-11-02 12:41:22 -07:00
parent a9c4c006b2
commit 31e8ac11a2
105 changed files with 290 additions and 260 deletions

View File

@@ -379,6 +379,11 @@ If an item contains spaces, it should be surrounded by ".
<GIGroupItem> ::= <EmailAddress>|<UniqueID>|groups/<String>
<CIGroupType> ::= customer|group|other|serviceaccount|user
<CIPolicyName> ::= policies/<String>|settings/<String>|<String>
<ClassificationLabelID> ::= <String>
<ClassificationLabelFieldID> ::= <String>
<ClassificationLabelSelectionID> ::= <String>
<ClassificationLabelName> ::= labels/<ClassificationLabelID>[@latest|@published|@<Number>]
<ClassificationLabelPermissionName> ::= labels/<ClassificationLabelID>[@latest|@published|@<Number>]/permissions/(audiences|groups|people)/<String>
<ClassroomInvitationID> ::= <String>
<ClientID> ::= <String>
<CommandID> ::= <String>
@@ -448,11 +453,6 @@ If an item contains spaces, it should be surrounded by ".
<DriveFilePermissionID> ::= anyone|anyonewithlink|id:<String>
<DriveFilePermissionIDorEmail> ::= <DriveFilePermissionID>|<EmailAddress>
<DriveFileRevisionID> ::= <String>
<DriveLabelID> ::= <String>
<DriveLabelFieldID> ::= <String>
<DriveLabelSelectionID> ::= <String>
<DriveLabelName> ::= labels/<DriveLabelID>[@latest|@published|@<Number>]
<DriveLabelPermissionName> ::= labels/<DriveLabelID>[@latest|@published|@<Number>]/permissions/(audiences|groups|people)/<String>
<EmailAddress> ::= <String>@<DomainName>
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
<EmailReplacement> ::= <String>
@@ -694,11 +694,6 @@ If an item contains spaces, it should be surrounded by ".
<DriveFileRevisionIDList> ::= "<DriveFileRevisionID>(,<DriveFileRevisionID>)*"
<DriveFolderIDList> ::= "<DriveFolderID>(,<DriveFolderID>)*"
<DriveFolderNameList> ::= "<DriveFolderName>(,<DriveFolderName>)*"
<DriveLabelIDList> ::= "<DriveLabelID>(,<DriveLabelID>)*"
<DriveLabelNameList> ::= "<DriveLabelName>(,<DriveLabelName>)*"
<DriveLabelPermissionNameList> ::= "<DriveLabelPermissionName>(,<DriveLabelPermissionName>)*"
<DriveLabelFieldIDList> ::= "<DriveLabelFieldID>(,<DriveLabelFieldID>)*"
<DriveLabelSelectionIDList> ::= "<DriveLabelSelectionID>(,<DriveLabelSelectionID>)*"
<EmailAddressList> ::= "<EmailAddress>(,<EmailAddress>)*"
<EmailItemList> ::= "<EmailItem>(,<EmailItem>)*"
<EventIDList> ::= "<EventID>(,<EventID>)*"
@@ -1004,6 +999,10 @@ Specify a collection of items by directly specifying them; the item type is dete
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
<CIPolicyNameEntity> ::=
<CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
<ClassificationLabelNameEntity> ::=
<ClassificationLabelNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
<ClassificationLabelPermissionNameEntity> ::=
<ClassificationLabelPermissionNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
<ClassroomInvitationIDEntity> ::=
<ClassroomInvitationIDList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
<ContactEntity> ::=
@@ -1127,10 +1126,6 @@ Specify a collection of items by directly specifying them; the item type is dete
(first|last|allexceptfirst|allexceptlast <Number>)|
(before|after <Time>) | (range <Time> <Time>)|
<FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
<DriveLabelNameEntity> ::=
<DriveLabelNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
<DriveLabelPermissionNameEntity> ::=
<DriveLabelPermissionNameList> | <FileSelector> | <CSVFileSelector> | <CSVDataSelector>
<EmailAddressEntity> ::=
<EmailAddressList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
<FilterIDEntity> ::=
@@ -2707,6 +2702,35 @@ gam print chromesnvalidity [todrive <ToDriveAttribute>*]
cros_sn <SerialNumberEntity> [listlimit <Number>]
[delimiter <Character>]
# Classification Labels
gam [<UserTypeEntity>] info classificationlabels <ClassificationLabelNameEntity>
[[basic|full] [languagecode <LanguageCode>]
[formatjson] [adminaccess|asadmin]
gam [<UserTypeEntity>] print classificationlabels [todrive <ToDriveAttribute>*]
[basic|full] [languagecode <LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
gam [<UserTypeEntity>] show classificationlabels
[basic|full] [languagecode <LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson] [adminaccess|asadmin]
`
gam [<UserTypeEntity>] create classificationlabelpermission <ClassificationLabelNameEntity>
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
role applier|editor|organizer|reader
[formatjson] [adminaccess|asadmin]
gam [<UserTypeEntity>] delete classificationlabelpermission <ClassificationLabelNameEntity>
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
[adminaccess|asadmin]
gam [<UserTypeEntity>] remove classificationlabelpermission <ClassificationLabelPermissionNameEntity>
[adminaccess|asadmin]
gam [<UserTypeEntity>] print classificationlabelpermissions <ClassificationLabelNameEntity> [todrive <ToDriveAttribute>*]
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
gam [<UserTypeEntity>] show classificationlabelpermissions <ClassificationLabelNameEntity>
[formatjson] [adminaccess|asadmin]
# Context Aware Access
<QueryCEL> ::= <String>
@@ -3534,35 +3558,6 @@ gam show people|peopleprofile
[allfields|(fields <PeopleFieldNameList>)] [showmetadata]
[formatjson]
# Drive Labels
gam [<UserTypeEntity>] info drivelabels <DriveLabelNameEntity>
[[basic|full] [languagecode <LanguageCode>]
[formatjson] [adminaccess|asadmin]
gam [<UserTypeEntity>] print drivelabels [todrive <ToDriveAttribute>*]
[basic|full] [languagecode <LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
gam [<UserTypeEntity>] show drivelabels
[basic|full] [languagecode <LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson] [adminaccess|asadmin]
`
gam [<UserTypeEntity>] create drivelabelpermission <DriveLabelNameEntity>
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
role applier|editor|organizer|reader
[formatjson] [adminaccess|asadmin]
gam [<UserTypeEntity>] delete drivelabelpermission <DriveLabelNameEntity>
(user <UserItem>) | (group <GroupItem>) | (audience <String>)
[adminaccess|asadmin]
gam [<UserTypeEntity>] remove drivelabelpermission <DriveLabelPermissionNameEntity>
[adminaccess|asadmin]
gam [<UserTypeEntity>] print drivelabelpermissions <DriveLabelNameEntity> [todrive <ToDriveAttribute>*]
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
gam [<UserTypeEntity>] show drivelabelpermissions <DriveLabelNameEntity>
[formatjson] [adminaccess|asadmin]
# Email Audit Monitor
gam audit monitor create <EmailAddress> <DestEmailAddress> [begin <DateTime>] [end <DateTime>]
@@ -6564,7 +6559,7 @@ gam <UserTypeEntity> info drivefile <DriveFileEntity>
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
[showdrivename] [showshareddrivepermissions]
[(showlabels details|ids)|(includelabels <DriveLabelIDList>)]
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
[showparentsidsaslist] [followshortcuts [<Boolean>]]
[stripcrsfromname]
[formatjson]
@@ -6668,26 +6663,13 @@ gam <UserTypeEntity> create|add permissions <DriveFileEntity> <DriveFilePermissi
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
<PermissionMatch>* [<PermissionMatchAction>]
gam [<UserTypeEntity>] info drivelabels <DriveLabelNameEntity>
[[basic|full] [languagecode <BCP47LanguageCode>]
[formatjson] [adminaccess|asadmin]
gam [<UserTypeEntity>] print <drivelabels> [todrive <ToDriveAttribute>*]
[basic|full] [languagecode <BCP47LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson [quotechar <Character>]] [adminaccess|asadmin]
gam [<UserTypeEntity>] show drivelabels
[basic|full] [languagecode <BCP47LanguageCode>]
[publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
[formatjson] [adminaccess|asadmin]
gam <UserTypeEntity> process filedrivelabels <DriveFileEntity>
(addlabel <DriveLabelIDList>)*
(deletelabel <DriveLabelIDList>)*
(addlabelfield <DriveLabelID> <DriveLabelFieldID>
(text <String>)|selection <DriveLabelSelectionIDList>)|
(addlabel <ClassificationLabelIDList>)*
(deletelabel <ClassificationLabelIDList>)*
(addlabelfield <ClassificationLabelID> <ClassificationLabelFieldID>
(text <String>)|selection <ClassificationLabelSelectionIDList>)|
(integer <Number>)|(date <Date>)|(user <EmailAddressList>))*
(deletelabelfield <DriveLabelID> <DriveLabelFieldID>)*
(deletelabelfield <ClassificationLabelID> <ClassificationLabelFieldID>)*
[nodetails]
gam show ownership <DriveFileID>|(drivefilename <DriveFileName>)
@@ -6873,12 +6855,12 @@ gam <UserTypeEntity> collect orphans
contentrestrictions.restrictiontime|
contentrestrictions.type
<DriveLabelInfoSubfieldName> ::=
<ClassificationLabelInfoSubfieldName> ::=
labels.id| # modifiedByMe
labels.revisionid| # copyRequiresWriterPermission
labels.fields # viewedByMe
<DriveLabelsSubfieldName> ::=
<ClassificationLabelsSubfieldName> ::=
labels.modified| # modifiedByMe
labels.restricted| # copyRequiresWriterPermission
labels.starred| # starred
@@ -6984,9 +6966,9 @@ gam <UserTypeEntity> collect orphans
inheritedpermissionsdisabled|
isappauthorized|
labelinfo|
<DriveLabelInfoSubfieldName>|
<ClassificationLabelInfoSubfieldName>|
labels|
<DriveLabelsSubfieldName>|
<ClassificationLabelsSubfieldName>|
lastmodifyinguser|
<DriveLastModifyingUserSubfieldName>|
lastmodifyingusername|
@@ -7050,7 +7032,7 @@ gam <UserTypeEntity> show fileinfo <DriveFileEntity>
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
[showdrivename] [showshareddrivepermissions]
[(showlabels details|ids)|(includelabels <DriveLabelIDList>)]
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
[showparentsidsaslist] [followshortcuts [<Boolean>]]
[stripcrsfromname]
[formatjson]
@@ -7166,7 +7148,7 @@ gam <UserTypeEntity> print filelist [todrive <ToDriveAttribute>*]
[filepath|fullpath [folderpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
[showdrivename] [showshareddrivepermissions]
[(showlabels details|ids)|(includelabels <DriveLabelIDList>)]
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
[showparentsidsaslist] [showpermissionslast]
(orderby <DriveFileOrderByFieldName> [ascending|descending])* [delimiter <Character>]
[stripcrsfromname]

View File

@@ -1,3 +1,21 @@
7.00.35
Classification labels are now available for Gmail in addition to Drive.
* See: https://workspaceupdates.googleblog.com/2024/11/open-beta-data-classification-labels-gmail.html
The following command synonyms are available, there is no change in functionality:
```
gam [<UserTypeEntity>] info classificationlabels|drivelabels
gam [<UserTypeEntity>] print classificationlabels|drivelabels
gam [<UserTypeEntity>] show classificationlabels|drivelabels
gam [<UserTypeEntity>] create classificationlabelpermission|drivelabelpermission
gam [<UserTypeEntity>] delete classificationlabelpermission|drivelabelpermission
gam [<UserTypeEntity>] remove classificationlabelpermission|drivelabelpermission
gam [<UserTypeEntity>] print classificationlabelpermissions|drivelabelpermission
gam [<UserTypeEntity>] show classificationlabelpermissions|drivelabelpermission
```
7.00.34
Fixed bug introduced in 7.00.33 in `gam print group-members` that caused a trap.

View File

@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
"""
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
__version__ = '7.00.34'
__version__ = '7.00.35'
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
#pylint: disable=wrong-import-position
@@ -35214,7 +35214,7 @@ def doInfoCIPolicies():
printGettingAllAccountEntities(Ent.POLICY, ifilter)
policies = _filterPolicies(ci, getPageMessage(), ifilter)
_showPolicies(policies, FJQC, add_warnings, no_appnames, cd, groups_ci)
# gam print policies [todrive <ToDriveAttribute>*]
# [filter <String>] [nowarnings] [noappnames]
# [formatjson [quotechar <Character>]]
@@ -53831,7 +53831,7 @@ class DriveFileFields():
else:
_getDriveFieldSubField(field, self.fieldsList, self.parentsSubFields)
elif myarg == 'includelabels':
labelIds = getEntityList(Cmd.OB_DRIVE_LABEL_ID, shlexSplit=True)
labelIds = getEntityList(Cmd.OB_CLASSIFICATION_LABEL_ID, shlexSplit=True)
for labelId in labelIds:
self.includeLabels.append(normalizeDriveLabelID(labelId))
elif myarg.find('.') != -1:
@@ -63842,16 +63842,16 @@ def _showDriveLabel(label, j, jcount, FJQC):
if FJQC.formatJSON:
printLine(json.dumps(cleanJSON(label, timeObjects=DRIVELABELS_TIME_OBJECTS), ensure_ascii=False, sort_keys=True))
return
printEntity([Ent.DRIVE_LABEL_NAME, f'{label["name"]}'], j, jcount)
printEntity([Ent.CLASSIFICATION_LABEL_NAME, f'{label["name"]}'], j, jcount)
Ind.Increment()
showJSON(None, label, timeObjects=DRIVELABELS_TIME_OBJECTS, dictObjectsKey={'fields': 'id', 'choices': 'id'})
Ind.Decrement()
# gam [<UserTypeEntity>] info drivelabels <DriveLabelNameEntity>
# gam [<UserTypeEntity>] info classificationlabels <ClassificationLabelNameEntity>
# [[basic|full] [languagecode <BCP47LanguageCode>]
# [formatjson] [asadmin]
def infoDriveLabels(users, useAdminAccess=False):
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_DRIVE_LABEL_NAME, Ent.DRIVE_LABEL, shlexSplit=True)
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_CLASSIFICATION_LABEL_NAME, Ent.CLASSIFICATION_LABEL, shlexSplit=True)
FJQC = FormatJSONQuoteChar()
parameters = {'useAdminAccess': useAdminAccess}
while Cmd.ArgumentsRemaining():
@@ -63872,7 +63872,7 @@ def infoDriveLabels(users, useAdminAccess=False):
j = 0
for name in labelNames:
j += 1
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_NAME, name]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_NAME, name]
name = validateDriveLabelName(name, kvList, j, jcount, False)
if name is None:
continue
@@ -63896,11 +63896,11 @@ def infoDriveLabels(users, useAdminAccess=False):
def doInfoDriveLabels():
infoDriveLabels([_getAdminEmail()], True)
# gam [<UserTypeEntity>] print drivelabels> [todrive <ToDriveAttribute>*]
# gam [<UserTypeEntity>] print classificationlabels> [todrive <ToDriveAttribute>*]
# [basic|full] [languagecode <BCP47LanguageCode>]
# [publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
# [formatjson [quotechar <Character>]] [asadmin]
# gam [<UserTypeEntity>] show drivelabels
# gam [<UserTypeEntity>] show classificationlabels
# [basic|full] [languagecode <BCP47LanguageCode>]
# [publishedonly [<Boolean>]] [minimumrole applier|editor|organizer|reader]
# [formatjson] [asadmin]
@@ -63926,7 +63926,7 @@ def printShowDriveLabels(users, useAdminAccess=False):
if not drive:
continue
if csvPF:
printGettingAllEntityItemsForWhom(Ent.DRIVE_LABEL, user, i, count)
printGettingAllEntityItemsForWhom(Ent.CLASSIFICATION_LABEL, user, i, count)
pageMessage = getPageMessageForWhom()
else:
pageMessage = None
@@ -63938,7 +63938,7 @@ def printShowDriveLabels(users, useAdminAccess=False):
if not csvPF:
jcount = len(labels)
if not FJQC.formatJSON:
entityPerformActionNumItems([Ent.USER, user], jcount, Ent.DRIVE_LABEL, i, count)
entityPerformActionNumItems([Ent.USER, user], jcount, Ent.CLASSIFICATION_LABEL, i, count)
Ind.Increment()
j = 0
for label in labels:
@@ -63956,11 +63956,11 @@ def printShowDriveLabels(users, useAdminAccess=False):
ensure_ascii=False, sort_keys=True)
csvPF.WriteRowNoFilter(row)
except GAPI.permissionDenied as e:
entityActionFailedWarning([Ent.USER, user, Ent.DRIVE_LABEL, None], str(e), i, count)
entityActionFailedWarning([Ent.USER, user, Ent.CLASSIFICATION_LABEL, None], str(e), i, count)
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
if csvPF:
csvPF.writeCSVfile('Drive Labels')
csvPF.writeCSVfile('Classification Labels')
def doPrintShowDriveLabels():
printShowDriveLabels([_getAdminEmail()], True)
@@ -63969,17 +63969,17 @@ def _showDriveLabelPermission(labelperm, j, jcount, FJQC):
if FJQC.formatJSON:
printLine(json.dumps(cleanJSON(labelperm), ensure_ascii=False, sort_keys=True))
return
printEntity([Ent.DRIVE_LABEL_PERMISSION_NAME, f'{labelperm["name"]}'], j, jcount)
printEntity([Ent.CLASSIFICATION_LABEL_PERMISSION_NAME, f'{labelperm["name"]}'], j, jcount)
Ind.Increment()
showJSON(None, labelperm)
Ind.Decrement()
# gam [<UserTypeEntity>] create drivelabelpermission <DriveLabelNameEntity>
# gam [<UserTypeEntity>] create classificationlabelpermission <ClassificationLabelNameEntity>
# (user <UserItem>) | (group <GroupItem) | (audience <String>)
# role applier|editor|organizer|reader
# [nodetails|formatjson] [asadmin]
def createDriveLabelPermissions(users, useAdminAccess=False):
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_DRIVE_LABEL_NAME, Ent.DRIVE_LABEL_PERMISSION, shlexSplit=True)
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_CLASSIFICATION_LABEL_NAME, Ent.CLASSIFICATION_LABEL_PERMISSION, shlexSplit=True)
FJQC = FormatJSONQuoteChar()
parameters = {'useAdminAccess': useAdminAccess}
body = {}
@@ -64021,7 +64021,7 @@ def createDriveLabelPermissions(users, useAdminAccess=False):
j = 0
for name in labelNames:
j += 1
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_NAME, name, Ent.DRIVE_LABEL_PERMISSION, None]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_NAME, name, Ent.CLASSIFICATION_LABEL_PERMISSION, None]
name = validateDriveLabelName(name, kvList, j, jcount, False)
if name is None:
continue
@@ -64031,7 +64031,7 @@ def createDriveLabelPermissions(users, useAdminAccess=False):
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.PERMISSION_DENIED, GAPI.NOT_FOUND,
GAPI.INVALID, GAPI.INTERNAL_ERROR],
parent=name, body=body, **parameters)
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_PERMISSION, labelperm['name']]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_PERMISSION, labelperm['name']]
if not FJQC.formatJSON:
entityActionPerformed(kvList, j, jcount)
if showDetails:
@@ -64048,17 +64048,17 @@ def createDriveLabelPermissions(users, useAdminAccess=False):
def doCreateDriveLabelPermissions():
createDriveLabelPermissions([_getAdminEmail()], True)
# gam [<UserTypeEntity>] delete drivelabelpermission <DriveLabelNameEntity>
# gam [<UserTypeEntity>] delete classificationlabelpermission <ClassificationLabelNameEntity>
# (user <UserItem>) | (group <GroupItem) | (audience <String>)
# [asadmin]
# gam [<UserTypeEntity>] remove drivelabelpermission <DriveLabelPermissionNameEntity>
# gam [<UserTypeEntity>] remove classificationlabelpermission <ClassificationLabelPermissionNameEntity>
# [asadmin]
def deleteDriveLabelPermissions(users, useAdminAccess=False):
doDelete = Act.Get() == Act.DELETE
if doDelete:
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_DRIVE_LABEL_NAME, Ent.DRIVE_LABEL, shlexSplit=True)
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_CLASSIFICATION_LABEL_NAME, Ent.CLASSIFICATION_LABEL, shlexSplit=True)
else:
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_DRIVE_LABEL_PERMISSION_NAME, Ent.DRIVE_LABEL_PERMISSION, shlexSplit=True)
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_CLASSIFICATION_LABEL_PERMISSION_NAME, Ent.CLASSIFICATION_LABEL_PERMISSION, shlexSplit=True)
parameters = {'useAdminAccess': useAdminAccess, 'requests': [None]}
labelperm = ''
while Cmd.ArgumentsRemaining():
@@ -64088,7 +64088,7 @@ def deleteDriveLabelPermissions(users, useAdminAccess=False):
j = 0
for name in labelPermNames:
j += 1
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_PERMISSION_NAME, name]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_PERMISSION_NAME, name]
if doDelete:
parent = validateDriveLabelName(name, kvList, j, jcount, False)
if parent is None:
@@ -64115,13 +64115,13 @@ def deleteDriveLabelPermissions(users, useAdminAccess=False):
def doDeleteDriveLabelPermissions():
deleteDriveLabelPermissions([_getAdminEmail()], True)
# gam [<UserTypeEntity>] print drivelabelpermissions <DriveLabelNameEntity> [todrive <ToDriveAttribute>*]
# gam [<UserTypeEntity>] print classificationlabelpermissions <ClassificationLabelNameEntity> [todrive <ToDriveAttribute>*]
# [formatjson [quotechar <Character>]] [asadmin]
# gam [<UserTypeEntity>] show drivelabelpermissions <DriveLabelNameEntity>
# gam [<UserTypeEntity>] show classificationlabelpermissions <ClassificationLabelNameEntity>
# [formatjson] [asadmin]
def printShowDriveLabelPermissions(users, useAdminAccess=False):
csvPF = CSVPrintFile(['User', 'name', 'email', 'role', 'person', 'group', 'audience'], 'sortall') if Act.csvFormat() else None
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_DRIVE_LABEL_NAME, Ent.DRIVE_LABEL_PERMISSION, shlexSplit=True)
driveLabelNameEntity = getUserObjectEntity(Cmd.OB_CLASSIFICATION_LABEL_NAME, Ent.CLASSIFICATION_LABEL_PERMISSION, shlexSplit=True)
FJQC = FormatJSONQuoteChar(csvPF)
parameters = {'useAdminAccess': useAdminAccess}
while Cmd.ArgumentsRemaining():
@@ -64146,13 +64146,13 @@ def printShowDriveLabelPermissions(users, useAdminAccess=False):
j = 0
for name in labelNames:
j += 1
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_NAME, name, Ent.DRIVE_LABEL_PERMISSION, None]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_NAME, name, Ent.CLASSIFICATION_LABEL_PERMISSION, None]
name = validateDriveLabelName(name, kvList, j, jcount, False)
if name is None:
continue
kvList = [Ent.USER, user, Ent.DRIVE_LABEL_NAME, name]
kvList = [Ent.USER, user, Ent.CLASSIFICATION_LABEL_NAME, name]
if csvPF:
printGettingAllEntityItemsForWhom(Ent.DRIVE_LABEL_PERMISSION, name, j, jcount)
printGettingAllEntityItemsForWhom(Ent.CLASSIFICATION_LABEL_PERMISSION, name, j, jcount)
pageMessage = getPageMessageForWhom()
else:
pageMessage = None
@@ -64164,7 +64164,7 @@ def printShowDriveLabelPermissions(users, useAdminAccess=False):
if not csvPF:
jcount = len(labelperms)
if not FJQC.formatJSON:
entityPerformActionNumItems(kvList, jcount, Ent.DRIVE_LABEL_PERMISSION, i, count)
entityPerformActionNumItems(kvList, jcount, Ent.CLASSIFICATION_LABEL_PERMISSION, i, count)
Ind.Increment()
j = 0
for labelperm in labelperms:
@@ -64188,7 +64188,7 @@ def printShowDriveLabelPermissions(users, useAdminAccess=False):
break
Ind.Decrement()
if csvPF:
csvPF.writeCSVfile('Drive Label Permissions')
csvPF.writeCSVfile('Classification Label Permissions')
def doPrintShowDriveLabelPermissions():
printShowDriveLabelPermissions([_getAdminEmail()], True)
@@ -64202,12 +64202,12 @@ DRIVELABEL_FIELD_TYPE_MAP = {
}
# gam <UserTypeEntity> process filedrivelabels <DriveFileEntity>
# (addlabel <DriveLabelIDList>)*
# (deletelabel <DriveLabelIDList>)*
# (addlabelfield <DriveLabelID> <DriveLabelFieldID>
# (text <String>)|selection <DriveLabelSelectionIDList>)|
# (addlabel <ClassificationLabelIDList>)*
# (deletelabel <ClassificationLabelIDList>)*
# (addlabelfield <ClassificationLabelID> <ClassificationLabelFieldID>
# (text <String>)|selection <ClassificationLabelSelectionIDList>)|
# (integer <Number>)|(date <Date>)|(user <EmailAddressList>))*
# (deletelabelfield <DriveLabelID> <DriveLabelFieldID>)*
# (deletelabelfield <ClassificationLabelID> <ClassificationLabelFieldID>)*
# [nodetails]
def processFileDriveLabels(users):
fileIdEntity = getDriveFileEntity()
@@ -64221,23 +64221,23 @@ def processFileDriveLabels(users):
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if myarg == 'addlabel':
labelIds = getEntityList(Cmd.OB_DRIVE_LABEL_ID, shlexSplit=True)
labelIds = getEntityList(Cmd.OB_CLASSIFICATION_LABEL_ID, shlexSplit=True)
for labelId in labelIds:
actionList[myarg]['list'].append({'labelModifications': [{'labelId': normalizeDriveLabelID(labelId)}]})
kcount += 1
elif myarg == 'deletelabel':
labelIds = getEntityList(Cmd.OB_DRIVE_LABEL_ID, shlexSplit=True)
labelIds = getEntityList(Cmd.OB_CLASSIFICATION_LABEL_ID, shlexSplit=True)
for labelId in labelIds:
actionList[myarg]['list'].append({'labelModifications': [{'labelId': normalizeDriveLabelID(labelId), 'removeLabel': True}]})
kcount += 1
elif myarg == 'addlabelfield':
labelId = normalizeDriveLabelID(getString(Cmd.OB_DRIVE_LABEL_ID))
fieldId = getString(Cmd.OB_DRIVE_LABEL_FIELD_ID)
labelId = normalizeDriveLabelID(getString(Cmd.OB_CLASSIFICATION_LABEL_ID))
fieldId = getString(Cmd.OB_CLASSIFICATION_LABEL_FIELD_ID)
fieldType = getChoice(DRIVELABEL_FIELD_TYPE_MAP, mapChoice=True)
if fieldType == 'setTextValues':
valueList = [getString(Cmd.OB_STRING, minLen=0)]
elif fieldType == 'setSelectionValues':
valueList = convertEntityToList(getString(Cmd.OB_DRIVE_LABEL_SELECTION_ID_LIST, minLen=0), shlexSplit=True)
valueList = convertEntityToList(getString(Cmd.OB_CLASSIFICATION_LABEL_SELECTION_ID_LIST, minLen=0), shlexSplit=True)
elif fieldType == 'setIntegerValues':
valueList = [getInteger()]
elif fieldType == 'setDateValues':
@@ -64248,8 +64248,8 @@ def processFileDriveLabels(users):
'fieldModifications': [{'fieldId': fieldId, fieldType: valueList}]}]})
kcount += 1
elif myarg == 'deletelabelfield':
labelId = normalizeDriveLabelID(getString(Cmd.OB_DRIVE_LABEL_ID))
fieldId = getString(Cmd.OB_DRIVE_LABEL_FIELD_ID)
labelId = normalizeDriveLabelID(getString(Cmd.OB_CLASSIFICATION_LABEL_ID))
fieldId = getString(Cmd.OB_CLASSIFICATION_LABEL_FIELD_ID)
actionList[myarg]['list'].append({'labelModifications': [{'labelId': labelId,
'fieldModifications': [{'fieldId': fieldId, 'unsetValues': True}]}]})
kcount += 1
@@ -64264,7 +64264,7 @@ def processFileDriveLabels(users):
if jcount == 0:
continue
Act.Set(Act.PROCESS)
entityPerformActionSubItemModifierNumItems([Ent.USER, user], Ent.DRIVE_LABEL, Act.MODIFIER_FOR, jcount, Ent.DRIVE_FILE_OR_FOLDER)
entityPerformActionSubItemModifierNumItems([Ent.USER, user], Ent.CLASSIFICATION_LABEL, Act.MODIFIER_FOR, jcount, Ent.DRIVE_FILE_OR_FOLDER)
Ind.Increment()
j = 0
userError = False
@@ -64273,16 +64273,16 @@ def processFileDriveLabels(users):
k = 0
kvList = [Ent.USER, user, Ent.DRIVE_FILE_OR_FOLDER_ID, fileId]
Act.Set(Act.PROCESS)
entityPerformActionNumItems(kvList, kcount, Ent.DRIVE_LABEL)
entityPerformActionNumItems(kvList, kcount, Ent.CLASSIFICATION_LABEL)
Ind.Increment()
for operation in ['deletelabelfield', 'deletelabel', 'addlabel', 'addlabelfield']:
Act.Set(actionList[operation]['action'])
for action in actionList[operation]['list']:
k += 1
xkvList = kvList.copy()
xkvList.extend([Ent.DRIVE_LABEL_ID, action['labelModifications'][0]['labelId']])
xkvList.extend([Ent.CLASSIFICATION_LABEL_ID, action['labelModifications'][0]['labelId']])
if 'fieldModifications' in action['labelModifications'][0]:
xkvList.extend([Ent.DRIVE_LABEL_FIELD_ID, action['labelModifications'][0]['fieldModifications'][0]['fieldId']])
xkvList.extend([Ent.CLASSIFICATION_LABEL_FIELD_ID, action['labelModifications'][0]['fieldModifications'][0]['fieldId']])
try:
label = callGAPI(drive.files(), 'modifyLabels',
throwReasons=GAPI.DRIVE3_MODIFY_LABEL_THROW_REASONS,
@@ -75589,6 +75589,10 @@ MAIN_COMMANDS_OBJ_ALIASES = {
Cmd.ARG_CIMEMBER: Cmd.ARG_CIGROUPMEMBERS,
Cmd.ARG_CIMEMBERS: Cmd.ARG_CIGROUPMEMBERS,
Cmd.ARG_CIPOLICIES: Cmd.ARG_CIPOLICY,
Cmd.ARG_CLASSIFICATIONLABEL: Cmd.ARG_DRIVELABEL,
Cmd.ARG_CLASSIFICATIONLABELS: Cmd.ARG_DRIVELABEL,
Cmd.ARG_CLASSIFICATIONLABELPERMISSION: Cmd.ARG_DRIVELABELPERMISSION,
Cmd.ARG_CLASSIFICATIONLABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
Cmd.ARG_CLASS: Cmd.ARG_COURSE,
Cmd.ARG_CLASSES: Cmd.ARG_COURSES,
Cmd.ARG_CLASSPARTICIPANTS: Cmd.ARG_COURSEPARTICIPANTS,
@@ -76619,6 +76623,10 @@ USER_COMMANDS_OBJ_ALIASES = {
Cmd.ARG_BACKUPCODES: Cmd.ARG_BACKUPCODE,
Cmd.ARG_CALENDARS: Cmd.ARG_CALENDAR,
Cmd.ARG_CALENDARACLS: Cmd.ARG_CALENDARACL,
Cmd.ARG_CLASSIFICATIONLABEL: Cmd.ARG_DRIVELABEL,
Cmd.ARG_CLASSIFICATIONLABELS: Cmd.ARG_DRIVELABEL,
Cmd.ARG_CLASSIFICATIONLABELPERMISSION: Cmd.ARG_DRIVELABELPERMISSION,
Cmd.ARG_CLASSIFICATIONLABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
Cmd.ARG_CLASSROOMINVITATIONS: Cmd.ARG_CLASSROOMINVITATION,
Cmd.ARG_CHATEVENTS: Cmd.ARG_CHATEVENT,
Cmd.ARG_CHATMEMBERS: Cmd.ARG_CHATMEMBER,

View File

@@ -240,8 +240,8 @@ _INFO = {
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
DRIVETD: {'name': 'Drive API v3 - todrive', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
DRIVELABELS_ADMIN: {'name': 'Drive Labels API v2beta - Admin', 'version': 'v2beta', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
DRIVELABELS_USER: {'name': 'Drive Labels API v2beta - User', 'version': 'v2beta', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
DRIVELABELS_ADMIN: {'name': 'Drive Labels API - Admin', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
DRIVELABELS_USER: {'name': 'Drive Labels API - User', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
@@ -619,11 +619,11 @@ _SVCACCT_SCOPES = [
'api': DRIVEACTIVITY,
'subscopes': [],
'scope': 'https://www.googleapis.com/auth/drive.activity'},
{'name': 'Drive Labels API v2beta - Admin',
{'name': 'Drive Labels API - Admin',
'api': DRIVELABELS_ADMIN,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/drive.admin.labels'},
{'name': 'Drive Labels API v2beta - User',
{'name': 'Drive Labels API - User',
'api': DRIVELABELS_USER,
'subscopes': READONLY,
'scope': 'https://www.googleapis.com/auth/drive.labels'},

View File

@@ -495,6 +495,10 @@ class GamCLArgs():
ARG_CIMEMBERS = 'cimembers'
ARG_CIPOLICY = 'policy'
ARG_CIPOLICIES = 'policies'
ARG_CLASSIFICATIONLABEL = 'classificationlabel'
ARG_CLASSIFICATIONLABELS = 'classificationlabels'
ARG_CLASSIFICATIONLABELPERMISSION = 'classificationlabelpermission'
ARG_CLASSIFICATIONLABELPERMISSIONS = 'classificationlabelpermissions'
ARG_CLASS = 'class'
ARG_CLASSES = 'classes'
ARG_CLASSPARTICIPANTS = 'classparticipants'
@@ -846,6 +850,11 @@ class GamCLArgs():
OB_CIDR_NETMASK = 'CIDRnetmask'
OB_CIGROUP_ALIAS_LIST = "CIGroupAliasList"
OB_CIPOLICY_NAME_ENTITY = 'CIPolicyNameEntity'
OB_CLASSIFICATION_LABEL_ID = 'ClassificationLabelID'
OB_CLASSIFICATION_LABEL_NAME = 'ClassificationLabelName'
OB_CLASSIFICATION_LABEL_PERMISSION_NAME = 'ClassificationLabelPermissionName'
OB_CLASSIFICATION_LABEL_FIELD_ID = 'ClassificationLabelFieldID'
OB_CLASSIFICATION_LABEL_SELECTION_ID_LIST = 'ClassificationLabelSelectionIDList'
OB_CLASSROOM_INVITATION_ID_ENTITY = 'ClassroomInvitationIDEntity'
OB_CLIENT_ID = 'ClientID'
OB_COLLABORATOR_ITEM = 'CollaboratorItem'
@@ -899,11 +908,6 @@ class GamCLArgs():
OB_DRIVE_FOLDER_NAME = 'DriveFolderName'
OB_DRIVE_FOLDER_NAME_LIST = 'DriveFolderNameList'
OB_DRIVE_FOLDER_PATH = 'DriveFolderPath'
OB_DRIVE_LABEL_ID = 'DriveLabelID'
OB_DRIVE_LABEL_NAME = 'DriveLabelName'
OB_DRIVE_LABEL_PERMISSION_NAME = 'DriveLabelPermissionName'
OB_DRIVE_LABEL_FIELD_ID = 'DriveLabelFieldID'
OB_DRIVE_LABEL_SELECTION_ID_LIST = 'DriveLabelSelectionIDList'
OB_EMAIL_ADDRESS = 'EmailAddress'
OB_EMAIL_ADDRESS_ENTITY = 'EmailAddressEntity'
OB_EMAIL_ADDRESS_LIST = 'EmailAddressList'

View File

@@ -110,6 +110,12 @@ class GamEntity():
CHROME_POLICY_SCHEMA = 'cpsc'
CHROME_RELEASE = 'crel'
CHROME_VERSION = 'cver'
CLASSIFICATION_LABEL = 'dlab'
CLASSIFICATION_LABEL_FIELD_ID = 'dlfi'
CLASSIFICATION_LABEL_ID = 'dlid'
CLASSIFICATION_LABEL_NAME = 'dlna'
CLASSIFICATION_LABEL_PERMISSION = 'dlpe'
CLASSIFICATION_LABEL_PERMISSION_NAME = 'dlpn'
CLASSROOM_INVITATION = 'clai'
CLASSROOM_INVITATION_OWNER = 'clio'
CLASSROOM_INVITATION_STUDENT = 'clis'
@@ -193,12 +199,6 @@ class GamEntity():
DRIVE_FOLDER_PATH = 'folp'
DRIVE_FOLDER_RENAMED = 'forn'
DRIVE_FOLDER_SHORTCUT = 'fols'
DRIVE_LABEL = 'dlab'
DRIVE_LABEL_FIELD_ID = 'dlfi'
DRIVE_LABEL_ID = 'dlid'
DRIVE_LABEL_NAME = 'dlna'
DRIVE_LABEL_PERMISSION = 'dlpe'
DRIVE_LABEL_PERMISSION_NAME = 'dlpn'
DRIVE_ORPHAN_FILE_OR_FOLDER = 'orph'
DRIVE_PARENT_FOLDER = 'fipf'
DRIVE_PARENT_FOLDER_ID = 'fipi'
@@ -462,6 +462,12 @@ class GamEntity():
CHROME_POLICY_SCHEMA: ['Chrome Policy Schemas', 'Chrome Policy Schema'],
CHROME_RELEASE: ['Chrome Releases', 'Chrome Release'],
CHROME_VERSION: ['Chrome Versions', 'Chrome Version'],
CLASSIFICATION_LABEL: ['Classification Labels', 'Classification Label'],
CLASSIFICATION_LABEL_FIELD_ID: ['Classification Label Field IDs', 'Classification Label Field ID'],
CLASSIFICATION_LABEL_ID: ['Classification Label IDs', 'Classification Label ID'],
CLASSIFICATION_LABEL_NAME: ['Classification Label Names', 'Classification Label Name'],
CLASSIFICATION_LABEL_PERMISSION: ['Classification Label Permissions', 'Classification Label Permission'],
CLASSIFICATION_LABEL_PERMISSION_NAME: ['Classification Label Permission Names', 'Classification Label Permission Name'],
CLASSROOM_INVITATION: ['Classroom Invitations', 'Classroom Invitation'],
CLASSROOM_INVITATION_OWNER: ['Classroom Owner Invitations', 'Classroom Owner Invitation'],
CLASSROOM_INVITATION_STUDENT: ['Classroom Student Invitations', 'Classroom Student Invitation'],
@@ -545,12 +551,6 @@ class GamEntity():
DRIVE_FOLDER_PATH: ['Drive Folder Paths', 'Drive Folder Path'],
DRIVE_FOLDER_RENAMED: ['Drive Folders Renamed', 'Drive Folder Renamed'],
DRIVE_FOLDER_SHORTCUT: ['Drive Folder Shortcuts', 'Drive Folder Shortcut'],
DRIVE_LABEL: ['Drive Labels', 'Drive Label'],
DRIVE_LABEL_FIELD_ID: ['Drive Label Field IDs', 'Drive Label Field ID'],
DRIVE_LABEL_ID: ['Drive Label IDs', 'Drive Label ID'],
DRIVE_LABEL_NAME: ['Drive Label Names', 'Drive Label Name'],
DRIVE_LABEL_PERMISSION: ['Drive Label Permissions', 'Drive Label Permission'],
DRIVE_LABEL_PERMISSION_NAME: ['Drive Label Permission Names', 'Drive Label Permission Name'],
DRIVE_ORPHAN_FILE_OR_FOLDER: ['Drive Orphan Files/Folders', 'Drive Orphan File/Folder'],
DRIVE_PARENT_FOLDER: ['Drive Parent Folders', 'Drive Parent Folder'],
DRIVE_PARENT_FOLDER_ID: ['Drive Parent Folder IDs', 'Drive Parent Folder ID'],