From 89970bbf0d4cdb4e0d9f0c15cd30b7c9698d109c Mon Sep 17 00:00:00 2001 From: Ross Scroggs Date: Tue, 17 Dec 2024 09:04:59 -0800 Subject: [PATCH] Updated `gam archive messages ` --- src/GamUpdate.txt | 6 ++++++ src/gam/__init__.py | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/GamUpdate.txt b/src/GamUpdate.txt index c7136236..53c2f2e1 100644 --- a/src/GamUpdate.txt +++ b/src/GamUpdate.txt @@ -1,3 +1,9 @@ +7.02.02 + +Updated `gam archive messages ` to retry the following unexpected error +that occurs after many messages have been successfully archived. +`ERROR: 404: notFound - Unable to lookup group` + 7.02.01 Added options `locked` and `unlocked` to `gam update cigroups` that allow locking/unlocking groups. diff --git a/src/gam/__init__.py b/src/gam/__init__.py index 57524019..b03d53e5 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki """ __author__ = 'GAM Team ' -__version__ = '7.02.01' +__version__ = '7.02.02' __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)' #pylint: disable=wrong-import-position @@ -34857,7 +34857,7 @@ def doUpdateCIGroups(): entityActionFailedWarning([Ent.CLOUD_IDENTITY_GROUP, group], str(e), i, count) continue # If a group currently isn't a security group or locked, and we want to add security and locked, - # we have to do two commands to avoid a beta bug + # we have to do two commands to meet a beta requirement ci_body.setdefault('labels', {}) if ((CIGROUP_SECURITY_LABEL not in cigInfo['labels']) and (CIGROUP_LOCKED_LABEL not in cigInfo['labels']) and @@ -34880,16 +34880,15 @@ def doUpdateCIGroups(): try: if twoUpdates: ci_body['labels'].pop(CIGROUP_LOCKED_LABEL) - callGAPI(cipl.groups(), 'patch', - throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS, - retryReasons=GAPI.CIGROUP_RETRY_REASONS, - name=name, body=ci_body, updateMask=','.join(list(ci_body.keys()))) - if twoUpdates: - ci_body['labels'][CIGROUP_LOCKED_LABEL] = '' callGAPI(cipl.groups(), 'patch', throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS, name=name, body=ci_body, updateMask=','.join(list(ci_body.keys()))) + ci_body['labels'][CIGROUP_LOCKED_LABEL] = '' + callGAPI(cipl.groups(), 'patch', + throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS, + retryReasons=GAPI.CIGROUP_RETRY_REASONS, + name=name, body=ci_body, updateMask=','.join(list(ci_body.keys()))) except (GAPI.notFound, GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidInput, GAPI.invalidArgument, GAPI.systemError, GAPI.permissionDenied, GAPI.failedPrecondition, GAPI.serviceNotAvailable) as e: @@ -35152,7 +35151,7 @@ def doUpdateCIGroups(): removeRoles = [] postUpdateRoles = [] memberRoles = callGAPI(ci.groups().memberships(), 'get', - name=memberName, fields=f'name,preferredMemberKey,roles,type') + name=memberName, fields='name,preferredMemberKey,roles,type') getCIGroupMemberRoleFixType(memberRoles) current_roles = [crole['name'] for crole in memberRoles['roles']] # When upgrading role, strip any expiryDetail from member before role changes @@ -69680,8 +69679,9 @@ def archiveMessages(users): stream.write(base64.urlsafe_b64decode(str(message['raw']))) try: callGAPI(gm.archive(), 'insert', - throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.BAD_REQUEST, GAPI.INVALID, + throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN], + retryReasons=[GAPI.NOT_FOUND], groupId=group, media_body=googleapiclient.http.MediaIoBaseUpload(stream, mimetype='message/rfc822', resumable=True)) if not csvPF: entityActionPerformed([Ent.USER, user, entityType, messageId], j, jcount) @@ -69690,6 +69690,9 @@ def archiveMessages(users): except GAPI.serviceNotAvailable: userGmailServiceNotEnabledWarning(user, i, count) break + except GAPI.notFound as e: + _processMessageFailed(user, messageId, str(e), j, jcount) + break except (GAPI.badRequest, GAPI.invalid, GAPI.failedPrecondition, GAPI.forbidden, googleapiclient.errors.MediaUploadSizeError) as e: _processMessageFailed(user, messageId, str(e), j, jcount)