gam7 7.5.16__tar.gz → 7.5.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- {gam7-7.5.16 → gam7-7.5.18}/PKG-INFO +1 -1
- {gam7-7.5.16 → gam7-7.5.18}/src/GamCommands.txt +7 -3
- {gam7-7.5.16 → gam7-7.5.18}/src/GamUpdate.txt +23 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/__init__.py +16 -18
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glgapi.py +5 -1
- {gam7-7.5.16 → gam7-7.5.18}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/actions/creds.tar.xz.gpg +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/actions/decrypt.sh +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/actions/entitlements.plist +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/stale.yml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/workflows/build.yml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.github/workflows/pypi.yml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/.pre-commit-config.yaml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/LICENSE +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/README.md +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/pyproject.toml +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/.gitignore +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/LICENSE +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/cacerts.pem +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/callgam.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/__main__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/auth.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/client.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/core.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/data.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/http.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/http_core.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/token_store.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/atom/url.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/cacerts.pem +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/service.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam/six.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam-install.sh +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam-setup.bat +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam.exe.manifest +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam.spec +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/gam.wxs +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/license.rtf +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/requirements-dev.txt +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/requirements.txt +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/setup.cfg +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/setup.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/tools/mkGamRef.py +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/tools/openssl.props +0 -0
- {gam7-7.5.16 → gam7-7.5.18}/src/version_info.txt.in +0 -0
|
@@ -1276,7 +1276,7 @@ If the pattern {{Section}} appears in <FileName>, it will be replaced with the n
|
|
|
1276
1276
|
For redirect csv, the optional arguments must appear in the order shown.
|
|
1277
1277
|
<Redirect> ::=
|
|
1278
1278
|
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
|
1279
|
-
[columndelimiter <Character>] [
|
|
1279
|
+
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
|
1280
1280
|
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
|
1281
1281
|
[todrive <ToDriveAttribute>*] |
|
|
1282
1282
|
redirect stdout <FileName> [multiprocess] [append] |
|
|
@@ -3926,6 +3926,10 @@ gam print group-members [todrive <ToDriveAttribute>*]
|
|
|
3926
3926
|
|
|
3927
3927
|
# Cloud Identity Groups
|
|
3928
3928
|
|
|
3929
|
+
<CBCMBrowser> ::= id:cbcm-browser.<DeviceId>
|
|
3930
|
+
<ChromeOSDevice> ::= id:chrome-os-device.<DeviceId>
|
|
3931
|
+
<BrowserDeviceList> ::= "(<CBCMBrowser>|<ChromeOSDevice>)(,(<CBCMBrowser>|<ChromeOSDevice>))*"
|
|
3932
|
+
|
|
3929
3933
|
<CIGroupFieldsName> ::=
|
|
3930
3934
|
additionalgroupkeys|
|
|
3931
3935
|
createtime|
|
|
@@ -3955,12 +3959,12 @@ gam update cigroups <GroupEntity> create|add [<GroupRole>]
|
|
|
3955
3959
|
[usersonly|groupsonly]
|
|
3956
3960
|
[notsuspended|suspended] [notarchived|archived]
|
|
3957
3961
|
[expire|expires <Time>] [preview] [actioncsv]
|
|
3958
|
-
<UserTypeEntity>
|
|
3962
|
+
<UserTypeEntity>|<BrowserDeviceList>
|
|
3959
3963
|
gam update cigroups <GroupEntity> delete|remove [<GroupRole>]
|
|
3960
3964
|
[usersonly|groupsonly]
|
|
3961
3965
|
[notsuspended|suspended] [notarchived|archived]
|
|
3962
3966
|
[preview] [actioncsv]
|
|
3963
|
-
<UserTypeEntity>
|
|
3967
|
+
<UserTypeEntity>|<BrowserDeviceList>
|
|
3964
3968
|
gam update cigroups <GroupEntity> sync [<GroupRole>|ignorerole]
|
|
3965
3969
|
[usersonly|groupsonly] [addonly|removeonly]
|
|
3966
3970
|
[notsuspended|suspended] [notarchived|archived]
|
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
7.05.18
|
|
2
|
+
|
|
3
|
+
Updated `gam calendars <CalendarEntity> show events` and `gam <UserTypeEntity> show events`
|
|
4
|
+
to display the event description according to `show_convert_cr_nl` in `gam.cfg`;
|
|
5
|
+
previously, GAM assumed `show_convert_cr_nl = true`.
|
|
6
|
+
```
|
|
7
|
+
show_convert_cr_nl = false
|
|
8
|
+
description:
|
|
9
|
+
Line 1
|
|
10
|
+
Line 2
|
|
11
|
+
Line 3
|
|
12
|
+
|
|
13
|
+
show_convert_cr_nl = true
|
|
14
|
+
description: Line 1\nLine 2\nLine 3\n
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
7.05.17
|
|
18
|
+
|
|
19
|
+
Updated commands that delete drive ACLs to handle the following error:
|
|
20
|
+
```
|
|
21
|
+
ERROR: 403: cannotDeletePermission - The authenticated user does not have the required access to delete the permission.
|
|
22
|
+
```
|
|
23
|
+
|
|
1
24
|
7.05.16
|
|
2
25
|
|
|
3
26
|
Added option `transpose [<Boolean>]` to `redirect csv` that causes
|
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.05.
|
|
28
|
+
__version__ = '7.05.18'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -4088,13 +4088,8 @@ def SetGlobalVariables():
|
|
|
4088
4088
|
GC.Values[GC.OUTPUT_DATEFORMAT] = GM.Globals[GM.OUTPUT_DATEFORMAT]
|
|
4089
4089
|
if not GC.Values[GC.OUTPUT_TIMEFORMAT]:
|
|
4090
4090
|
GC.Values[GC.OUTPUT_TIMEFORMAT] = GM.Globals[GM.OUTPUT_TIMEFORMAT]
|
|
4091
|
-
#
|
|
4092
|
-
|
|
4093
|
-
fileName = f'{GC.Values[GC.OAUTH2_TXT]}.lock'
|
|
4094
|
-
if not os.path.isfile(fileName):
|
|
4095
|
-
closeFile(openFile(fileName, mode=DEFAULT_FILE_APPEND_MODE))
|
|
4096
|
-
os.chmod(fileName, 0o666)
|
|
4097
|
-
GM.Globals[GM.OAUTH2_TXT_LOCK] = fileName
|
|
4091
|
+
# Define lockfile: oauth2.txt.lock
|
|
4092
|
+
GM.Globals[GM.OAUTH2_TXT_LOCK] = f'{GC.Values[GC.OAUTH2_TXT]}.lock'
|
|
4098
4093
|
# Override httplib2 settings
|
|
4099
4094
|
httplib2.debuglevel = GC.Values[GC.DEBUG_LEVEL]
|
|
4100
4095
|
# Reset global variables if required
|
|
@@ -4113,7 +4108,7 @@ def SetGlobalVariables():
|
|
|
4113
4108
|
if checkArgumentPresent(Cmd.MULTIPROCESSEXIT_CMD):
|
|
4114
4109
|
_setMultiprocessExit()
|
|
4115
4110
|
# redirect csv <FileName> [multiprocess] [append] [noheader] [charset <CharSet>]
|
|
4116
|
-
# [columndelimiter <Character>] [
|
|
4111
|
+
# [columndelimiter <Character>] [quotechar <Character>]] [noescapechar [<Boolean>]]
|
|
4117
4112
|
# [sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
|
4118
4113
|
# [todrive <ToDriveAttribute>*]
|
|
4119
4114
|
# redirect stdout <FileName> [multiprocess] [append]
|
|
@@ -39410,7 +39405,10 @@ def _showCalendarEvent(primaryEmail, calId, eventEntityType, event, k, kcount, F
|
|
|
39410
39405
|
Ind.Increment()
|
|
39411
39406
|
for field in EVENT_SHOW_ORDER:
|
|
39412
39407
|
if field in event:
|
|
39413
|
-
|
|
39408
|
+
if field != 'description':
|
|
39409
|
+
showJSON(field, event[field], skipObjects, EVENT_TIME_OBJECTS)
|
|
39410
|
+
else:
|
|
39411
|
+
printKeyValueWithCRsNLs(field, event[field])
|
|
39414
39412
|
skipObjects.add(field)
|
|
39415
39413
|
showJSON(None, event, skipObjects)
|
|
39416
39414
|
Ind.Decrement()
|
|
@@ -58745,7 +58743,7 @@ def _copyPermissions(drive, user, i, count, j, jcount,
|
|
|
58745
58743
|
except (GAPI.notFound, GAPI.permissionNotFound,
|
|
58746
58744
|
GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
58747
58745
|
GAPI.fileNeverWritable, GAPI.badRequest, GAPI.cannotRemoveOwner, GAPI.cannotModifyInheritedTeamDrivePermission,
|
|
58748
|
-
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded) as e:
|
|
58746
|
+
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded, GAPI.cannotDeletePermission) as e:
|
|
58749
58747
|
entityActionFailedWarning(kvList, str(e), k, kcount)
|
|
58750
58748
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
58751
58749
|
userDriveServiceNotEnabledWarning(user, str(e), i, count)
|
|
@@ -59776,7 +59774,7 @@ def _updateMoveFilePermissions(drive, user, i, count,
|
|
|
59776
59774
|
except (GAPI.notFound, GAPI.permissionNotFound,
|
|
59777
59775
|
GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
59778
59776
|
GAPI.fileNeverWritable, GAPI.badRequest, GAPI.cannotRemoveOwner, GAPI.cannotModifyInheritedTeamDrivePermission,
|
|
59779
|
-
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded) as e:
|
|
59777
|
+
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded, GAPI.cannotDeletePermission) as e:
|
|
59780
59778
|
entityActionFailedWarning(kvList, str(e), k, kcount)
|
|
59781
59779
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
59782
59780
|
userDriveServiceNotEnabledWarning(user, str(e), i, count)
|
|
@@ -61479,7 +61477,7 @@ def transferDrive(users):
|
|
|
61479
61477
|
if showRetentionMessages:
|
|
61480
61478
|
entityActionPerformed([Ent.USER, sourceUser, childFileType, childFileName, Ent.ROLE, ownerRetainRoleBody['role']], j, jcount)
|
|
61481
61479
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
61482
|
-
GAPI.badRequest, GAPI.sharingRateLimitExceeded, GAPI.cannotRemoveOwner) as e:
|
|
61480
|
+
GAPI.badRequest, GAPI.sharingRateLimitExceeded, GAPI.cannotRemoveOwner, GAPI.cannotDeletePermission) as e:
|
|
61483
61481
|
entityActionFailedWarning([Ent.USER, sourceUser, childFileType, childFileName], str(e), j, jcount)
|
|
61484
61482
|
except GAPI.permissionNotFound:
|
|
61485
61483
|
entityDoesNotHaveItemWarning([Ent.USER, sourceUser, childFileType, childFileName, Ent.PERMISSION_ID, sourcePermissionId], j, jcount)
|
|
@@ -61532,7 +61530,7 @@ def transferDrive(users):
|
|
|
61532
61530
|
if showRetentionMessages:
|
|
61533
61531
|
entityActionPerformed([Ent.USER, sourceUser, childFileType, childFileName, Ent.ROLE, sourceUpdateRole['role']], j, jcount)
|
|
61534
61532
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
61535
|
-
GAPI.badRequest, GAPI.sharingRateLimitExceeded, GAPI.cannotRemoveOwner) as e:
|
|
61533
|
+
GAPI.badRequest, GAPI.sharingRateLimitExceeded, GAPI.cannotRemoveOwner, GAPI.cannotDeletePermission) as e:
|
|
61536
61534
|
entityActionFailedWarning([Ent.USER, ownerUser, childFileType, childFileName], str(e), j, jcount)
|
|
61537
61535
|
except GAPI.permissionNotFound:
|
|
61538
61536
|
entityDoesNotHaveItemWarning([Ent.USER, ownerUser, childFileType, childFileName, Ent.PERMISSION_ID, sourcePermissionId], j, jcount)
|
|
@@ -61556,7 +61554,7 @@ def transferDrive(users):
|
|
|
61556
61554
|
if showRetentionMessages:
|
|
61557
61555
|
entityActionPerformed([Ent.USER, targetUser, childFileType, childFileName, Ent.ROLE, targetInsertBody['role']], j, jcount)
|
|
61558
61556
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
61559
|
-
GAPI.badRequest, GAPI.sharingRateLimitExceeded) as e:
|
|
61557
|
+
GAPI.badRequest, GAPI.sharingRateLimitExceeded, GAPI.cannotDeletePermission) as e:
|
|
61560
61558
|
entityActionFailedWarning([Ent.USER, ownerUser, childFileType, childFileName], str(e), j, jcount)
|
|
61561
61559
|
except GAPI.invalidSharingRequest as e:
|
|
61562
61560
|
entityActionFailedWarning([Ent.USER, ownerUser, childFileType, childFileName], Ent.TypeNameMessage(Ent.PERMISSION_ID, targetPermissionId, str(e)), j, jcount)
|
|
@@ -62299,7 +62297,7 @@ def claimOwnership(users):
|
|
|
62299
62297
|
entityActionPerformed([Ent.USER, oldOwner, entityType, fileDesc, Ent.ROLE, sourceRetainRoleBody['role']], l, lcount)
|
|
62300
62298
|
except GAPI.permissionNotFound:
|
|
62301
62299
|
entityDoesNotHaveItemWarning([Ent.USER, oldOwner, entityType, fileDesc, Ent.PERMISSION_ID, oldOwnerPermissionId], l, lcount)
|
|
62302
|
-
except (GAPI.badRequest, GAPI.insufficientFilePermissions) as e:
|
|
62300
|
+
except (GAPI.badRequest, GAPI.insufficientFilePermissions, GAPI.cannotDeletePermission) as e:
|
|
62303
62301
|
entityActionFailedWarning([Ent.USER, oldOwner, entityType, fileDesc], str(e), l, lcount)
|
|
62304
62302
|
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
62305
62303
|
userDriveServiceNotEnabledWarning(user, str(e), i, count)
|
|
@@ -63471,7 +63469,7 @@ def deleteDriveFileACLs(users, useDomainAdminAccess=False):
|
|
|
63471
63469
|
_updateSheetProtectedRangesACLchange(sheet, user, i, count, j, jcount, fileId, fileName, False, permission)
|
|
63472
63470
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
63473
63471
|
GAPI.fileNeverWritable, GAPI.badRequest, GAPI.cannotRemoveOwner, GAPI.cannotModifyInheritedTeamDrivePermission,
|
|
63474
|
-
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded) as e:
|
|
63472
|
+
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded, GAPI.cannotDeletePermission) as e:
|
|
63475
63473
|
entityActionFailedWarning([Ent.USER, user, entityType, fileName], str(e), j, jcount)
|
|
63476
63474
|
except GAPI.notFound as e:
|
|
63477
63475
|
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, fileName], str(e), j, jcount)
|
|
@@ -63527,7 +63525,7 @@ def deletePermissions(users, useDomainAdminAccess=False):
|
|
|
63527
63525
|
entityActionPerformed([Ent.DRIVE_FILE_OR_FOLDER_ID, ri[RI_ENTITY], Ent.PERMISSION_ID, ri[RI_ITEM]], int(ri[RI_J]), int(ri[RI_JCOUNT]))
|
|
63528
63526
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
63529
63527
|
GAPI.badRequest, GAPI.cannotRemoveOwner, GAPI.cannotModifyInheritedTeamDrivePermission,
|
|
63530
|
-
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded, GAPI.permissionNotFound,
|
|
63528
|
+
GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded, GAPI.permissionNotFound, GAPI.cannotDeletePermission,
|
|
63531
63529
|
GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
63532
63530
|
entityActionFailedWarning([Ent.DRIVE_FILE_OR_FOLDER_ID, ri[RI_ENTITY], Ent.PERMISSION_ID, ri[RI_ITEM]], str(e), int(ri[RI_J]), int(ri[RI_JCOUNT]))
|
|
63533
63531
|
if int(ri[RI_J]) == int(ri[RI_JCOUNT]):
|
|
@@ -37,6 +37,7 @@ CANNOT_CHANGE_OWNER_ACL = 'cannotChangeOwnerAcl'
|
|
|
37
37
|
CANNOT_CHANGE_OWN_PRIMARY_SUBSCRIPTION = 'cannotChangeOwnPrimarySubscription'
|
|
38
38
|
CANNOT_COPY_FILE = 'cannotCopyFile'
|
|
39
39
|
CANNOT_DELETE_ONLY_REVISION = 'cannotDeleteOnlyRevision'
|
|
40
|
+
CANNOT_DELETE_PERMISSION = 'cannotDeletePermission'
|
|
40
41
|
CANNOT_DELETE_PRIMARY_CALENDAR = 'cannotDeletePrimaryCalendar'
|
|
41
42
|
CANNOT_DELETE_PRIMARY_SENDAS = 'cannotDeletePrimarySendAs'
|
|
42
43
|
CANNOT_DELETE_RESOURCE_WITH_CHILDREN = 'cannotDeleteResourceWithChildren'
|
|
@@ -246,7 +247,7 @@ DRIVE3_UPDATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID_OWNERSHIP_TRANSFER, CANN
|
|
|
246
247
|
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, CANNOT_REMOVE_OWNER,
|
|
247
248
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION,
|
|
248
249
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
249
|
-
NOT_FOUND, PERMISSION_NOT_FOUND]
|
|
250
|
+
NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_DELETE_PERMISSION]
|
|
250
251
|
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
|
251
252
|
FILE_NEVER_WRITABLE, APPLY_LABEL_FORBIDDEN,
|
|
252
253
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
|
@@ -382,6 +383,8 @@ class cannotCopyFile(Exception):
|
|
|
382
383
|
pass
|
|
383
384
|
class cannotDeleteOnlyRevision(Exception):
|
|
384
385
|
pass
|
|
386
|
+
class cannotDeletePermission(Exception):
|
|
387
|
+
pass
|
|
385
388
|
class cannotDeletePrimaryCalendar(Exception):
|
|
386
389
|
pass
|
|
387
390
|
class cannotDeletePrimarySendAs(Exception):
|
|
@@ -676,6 +679,7 @@ REASON_EXCEPTION_MAP = {
|
|
|
676
679
|
CANNOT_CHANGE_OWN_PRIMARY_SUBSCRIPTION: cannotChangeOwnPrimarySubscription,
|
|
677
680
|
CANNOT_COPY_FILE: cannotCopyFile,
|
|
678
681
|
CANNOT_DELETE_ONLY_REVISION: cannotDeleteOnlyRevision,
|
|
682
|
+
CANNOT_DELETE_PERMISSION: cannotDeletePermission,
|
|
679
683
|
CANNOT_DELETE_PRIMARY_CALENDAR: cannotDeletePrimaryCalendar,
|
|
680
684
|
CANNOT_DELETE_PRIMARY_SENDAS: cannotDeletePrimarySendAs,
|
|
681
685
|
CANNOT_DELETE_RESOURCE_WITH_CHILDREN: cannotDeleteResourceWithChildren,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|