Use new Drive API v3 for emptying Shared Drive trash

This commit is contained in:
Ross Scroggs
2023-08-05 08:56:28 -07:00
parent a2e5452255
commit 7e99c0d0a5
2 changed files with 23 additions and 32 deletions

View File

@ -2,6 +2,12 @@
Merged GAM-Team version Merged GAM-Team version
6.61.21
Updated `gam <UserTypeEntity> empty drivetrash <SharedDriveEntity>` to use new Drive API v3
functionality for emptying the trash of a Shared Drive with a single API call. Previously, GAM had to purge each
individual file and folder in the trash.
6.61.20 6.61.20
Remove `audit.googleapis.com` from the list of project APIs. Remove `audit.googleapis.com` from the list of project APIs.

View File

@ -57832,43 +57832,28 @@ def emptyDriveTrash(users):
else: else:
fileIdEntity = {} fileIdEntity = {}
checkForExtraneousArguments() checkForExtraneousArguments()
kwargs = {'driveId': None}
i, count, users = getEntityArgument(users) i, count, users = getEntityArgument(users)
if not fileIdEntity: for user in users:
for user in users: i += 1
i += 1 if not fileIdEntity:
user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count) user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count)
if not drive: if not drive:
continue continue
try: else:
callGAPI(drive.files(), 'emptyTrash', user, drive = _validateUserSharedDrive(user, i, count, fileIdEntity)
throwReasons=GAPI.DRIVE_USER_THROW_REASONS) if not drive:
entityActionPerformed([Ent.USER, user, Ent.DRIVE_TRASH, None], i, count)
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
else:
Act.Set(Act.PURGE)
fileIdEntity['shareddrivefilequery'] = 'trashed = true'
for user in users:
i += 1
user, drive, jcount = _validateUserGetSharedDriveFileIDs(user, i, count, fileIdEntity, entityType=Ent.DRIVE_FILE_OR_FOLDER)
if jcount == 0:
continue continue
Ind.Increment() kwargs['driveId'] = fileIdEntity['shareddrive']['driveId']
j = 0 try:
for fileId in fileIdEntity['list']: callGAPI(drive.files(), 'emptyTrash',
j += 1 throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND],
try: **kwargs)
callGAPI(drive.files(), 'delete', entityActionPerformed([Ent.USER, user, Ent.DRIVE_TRASH, kwargs['driveId']], i, count)
throwReasons=GAPI.DRIVE_ACCESS_THROW_REASONS, except GAPI.notFound as e:
fileId=fileId, supportsAllDrives=True) entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, kwargs['driveId']], str(e), i, count)
fileName = fileId except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
entityActionPerformed([Ent.USER, user, Ent.DRIVE_FILE_OR_FOLDER, fileName], j, jcount) userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError) as e:
entityActionFailedWarning([Ent.USER, user, Ent.DRIVE_FILE_OR_FOLDER_ID, fileId], str(e), j, jcount)
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
userSvcNotApplicableOrDriveDisabled(user, str(e), i, count)
break
Ind.Decrement()
def _getDriveFileACLPrintKeysTimeObjects(): def _getDriveFileACLPrintKeysTimeObjects():
printKeys = ['id', 'type', 'emailAddress', 'domain', 'role', 'permissionDetails', printKeys = ['id', 'type', 'emailAddress', 'domain', 'role', 'permissionDetails',