mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 12:51:36 +00:00
actually remove gamlib/gl* files.
Some checks are pending
Build and test GAM / build (false, build, 1, Build Intel Ubuntu Jammy, ubuntu-22.04) (push) Waiting to run
Build and test GAM / build (false, build, 10, Build x86_64 macOS 15, macos-15-intel) (push) Waiting to run
Build and test GAM / build (false, build, 11, Build x86_64 macOS 26, macos-26-intel) (push) Waiting to run
Build and test GAM / build (false, build, 12, Build Arm MacOS 26, macos-26) (push) Waiting to run
Build and test GAM / build (false, build, 13, Build Intel Windows, windows-2025-vs2026) (push) Waiting to run
Build and test GAM / build (false, build, 14, Build Arm Windows, windows-11-arm) (push) Waiting to run
Build and test GAM / build (false, build, 2, Build Intel Ubuntu Noble, ubuntu-24.04) (push) Waiting to run
Build and test GAM / build (false, build, 3, Build Arm Ubuntu Noble, ubuntu-24.04-arm) (push) Waiting to run
Build and test GAM / build (false, build, 4, Build Arm Ubuntu Jammy, ubuntu-22.04-arm) (push) Waiting to run
Build and test GAM / build (false, build, 5, Build Intel StaticX Legacy, ubuntu-22.04, yes) (push) Waiting to run
Build and test GAM / build (false, build, 6, Build Arm StaticX Legacy, ubuntu-22.04-arm, yes) (push) Waiting to run
Build and test GAM / build (false, build, 8, Build Arm MacOS 14, macos-14) (push) Waiting to run
Build and test GAM / build (false, build, 9, Build Arm MacOS 15, macos-15) (push) Waiting to run
Build and test GAM / build (false, test, 16, Test Python 3.11, ubuntu-24.04, 3.11) (push) Waiting to run
Build and test GAM / build (false, test, 17, Test Python 3.12, ubuntu-24.04, 3.12) (push) Waiting to run
Build and test GAM / build (false, test, 18, Test Python 3.13, ubuntu-24.04, 3.13) (push) Waiting to run
Build and test GAM / build (false, test, 19, Test Python 3.15-dev, ubuntu-24.04, 3.15-dev) (push) Waiting to run
Build and test GAM / build (true, test, 20, Test Python 3.14 freethread, ubuntu-24.04, 3.14) (push) Waiting to run
Build and test GAM / publish (push) Blocked by required conditions
CodeQL / Analyze (python) (push) Waiting to run
Some checks are pending
Build and test GAM / build (false, build, 1, Build Intel Ubuntu Jammy, ubuntu-22.04) (push) Waiting to run
Build and test GAM / build (false, build, 10, Build x86_64 macOS 15, macos-15-intel) (push) Waiting to run
Build and test GAM / build (false, build, 11, Build x86_64 macOS 26, macos-26-intel) (push) Waiting to run
Build and test GAM / build (false, build, 12, Build Arm MacOS 26, macos-26) (push) Waiting to run
Build and test GAM / build (false, build, 13, Build Intel Windows, windows-2025-vs2026) (push) Waiting to run
Build and test GAM / build (false, build, 14, Build Arm Windows, windows-11-arm) (push) Waiting to run
Build and test GAM / build (false, build, 2, Build Intel Ubuntu Noble, ubuntu-24.04) (push) Waiting to run
Build and test GAM / build (false, build, 3, Build Arm Ubuntu Noble, ubuntu-24.04-arm) (push) Waiting to run
Build and test GAM / build (false, build, 4, Build Arm Ubuntu Jammy, ubuntu-22.04-arm) (push) Waiting to run
Build and test GAM / build (false, build, 5, Build Intel StaticX Legacy, ubuntu-22.04, yes) (push) Waiting to run
Build and test GAM / build (false, build, 6, Build Arm StaticX Legacy, ubuntu-22.04-arm, yes) (push) Waiting to run
Build and test GAM / build (false, build, 8, Build Arm MacOS 14, macos-14) (push) Waiting to run
Build and test GAM / build (false, build, 9, Build Arm MacOS 15, macos-15) (push) Waiting to run
Build and test GAM / build (false, test, 16, Test Python 3.11, ubuntu-24.04, 3.11) (push) Waiting to run
Build and test GAM / build (false, test, 17, Test Python 3.12, ubuntu-24.04, 3.12) (push) Waiting to run
Build and test GAM / build (false, test, 18, Test Python 3.13, ubuntu-24.04, 3.13) (push) Waiting to run
Build and test GAM / build (false, test, 19, Test Python 3.15-dev, ubuntu-24.04, 3.15-dev) (push) Waiting to run
Build and test GAM / build (true, test, 20, Test Python 3.14 freethread, ubuntu-24.04, 3.14) (push) Waiting to run
Build and test GAM / publish (push) Blocked by required conditions
CodeQL / Analyze (python) (push) Waiting to run
This commit is contained in:
@@ -1,322 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM action processing
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
class GamAction():
|
|
||||||
|
|
||||||
# Keys into NAMES; arbitrary values but must be unique
|
|
||||||
ACCEPT = 'acpt'
|
|
||||||
ADD = 'add '
|
|
||||||
ADD_PREVIEW = 'addp'
|
|
||||||
APPEND = 'apnd'
|
|
||||||
APPROVE = 'aprv'
|
|
||||||
ARCHIVE = 'arch'
|
|
||||||
BACKUP = 'back'
|
|
||||||
BLOCK = 'blok'
|
|
||||||
CANCEL = 'canc'
|
|
||||||
CANCEL_WIPE = 'canw'
|
|
||||||
CHECK = 'chek'
|
|
||||||
CLAIM = 'clai'
|
|
||||||
CLAIM_OWNERSHIP = 'clow'
|
|
||||||
CLEAR = 'clea'
|
|
||||||
CLOSE = 'clos'
|
|
||||||
COLLECT = 'coll'
|
|
||||||
COMMENT = 'comm'
|
|
||||||
COPY = 'copy'
|
|
||||||
COPY_MERGE = 'copm'
|
|
||||||
CREATE = 'crea'
|
|
||||||
CREATE_PREVIEW = 'crep'
|
|
||||||
CREATE_SHORTCUT = 'crsc'
|
|
||||||
DEDUP = 'dedu'
|
|
||||||
DELETE = 'dele'
|
|
||||||
DELETE_EMPTY = 'delm'
|
|
||||||
DELETE_PREVIEW = 'delp'
|
|
||||||
DELETE_SHORTCUT = 'desc'
|
|
||||||
DEPROVISION = 'depr'
|
|
||||||
DISABLE = 'disa'
|
|
||||||
DOWNLOAD = 'down'
|
|
||||||
DRAFT = 'draf'
|
|
||||||
EMPTY = 'empt'
|
|
||||||
ENABLE = 'enbl'
|
|
||||||
END = 'end '
|
|
||||||
EXISTS = 'exis'
|
|
||||||
EXPORT = 'expo'
|
|
||||||
EXTRACT = 'extr'
|
|
||||||
GET_COMMAND_RESULT = 'gtcr'
|
|
||||||
FETCH = 'fetc'
|
|
||||||
FORWARD = 'forw'
|
|
||||||
HIDE = 'hide'
|
|
||||||
IMPORT = 'impo'
|
|
||||||
INFO = 'info'
|
|
||||||
INITIALIZE = 'init'
|
|
||||||
INSERT = 'insr'
|
|
||||||
INVALIDATE = 'inva'
|
|
||||||
ISSUE_COMMAND = 'isco'
|
|
||||||
LIST = 'list'
|
|
||||||
LOOKUP = 'look'
|
|
||||||
MERGE = 'merg'
|
|
||||||
MODIFY = 'modi'
|
|
||||||
MOVE = 'move'
|
|
||||||
MOVE_MERGE = 'movm'
|
|
||||||
NOACTION = 'noac'
|
|
||||||
NOACTION_PREVIEW = 'noap'
|
|
||||||
OBLITERATE = 'obli'
|
|
||||||
PERFORM = 'perf'
|
|
||||||
PRE_PROVISIONED_DISABLE ='ppdi'
|
|
||||||
PRE_PROVISIONED_REENABLE ='ppre'
|
|
||||||
PRINT = 'prin'
|
|
||||||
PROCESS = 'proc'
|
|
||||||
PROCESS_PREVIEW = 'prop'
|
|
||||||
PURGE = 'purg'
|
|
||||||
RECREATE = 'recr'
|
|
||||||
REENABLE = 'reen'
|
|
||||||
REFRESH = 'refr'
|
|
||||||
RELABEL = 'rela'
|
|
||||||
REMOVE = 'remo'
|
|
||||||
REMOVE_PREVIEW = 'remp'
|
|
||||||
RENAME = 'rena'
|
|
||||||
REOPEN = 'reop'
|
|
||||||
REPLACE = 'repl'
|
|
||||||
REPLACE_DOMAIN = 'repd'
|
|
||||||
REPORT = 'repo'
|
|
||||||
RESET_YUBIKEY_PIV = 'rpiv'
|
|
||||||
RESPOND = 'resp'
|
|
||||||
RESTORE = 'rest'
|
|
||||||
RESUBMIT = 'res'
|
|
||||||
RETAIN = 'reta'
|
|
||||||
RETRIEVE_DATA = 'retd'
|
|
||||||
REVOKE = 'revo'
|
|
||||||
SAVE = 'save'
|
|
||||||
SEND = 'send'
|
|
||||||
SENDEMAIL = 'snem'
|
|
||||||
SENDREPLY = 'sner'
|
|
||||||
SET = 'set '
|
|
||||||
SETUP = 'setu'
|
|
||||||
SHARE = 'shar'
|
|
||||||
SHOW = 'show'
|
|
||||||
SIGNOUT = 'siou'
|
|
||||||
SKIP = 'skip'
|
|
||||||
SPAM = 'spam'
|
|
||||||
SUBMIT = 'subm'
|
|
||||||
SUSPEND = 'susp'
|
|
||||||
SYNC = 'sync'
|
|
||||||
TRANSFER = 'tran'
|
|
||||||
TRANSFER_OWNERSHIP = 'trow'
|
|
||||||
TRASH = 'tras'
|
|
||||||
TURNOFF2SV = 'to2s'
|
|
||||||
UNDELETE = 'unde'
|
|
||||||
UNHIDE = 'unhi'
|
|
||||||
UNSUSPEND = 'unsu'
|
|
||||||
UNTRASH = 'untr'
|
|
||||||
UPDATE = 'upda'
|
|
||||||
UPDATE_MOVE = 'upmo'
|
|
||||||
UPDATE_OWNER = 'updo'
|
|
||||||
UPDATE_PREVIEW = 'updp'
|
|
||||||
UPLOAD = 'uplo'
|
|
||||||
UNZIP = 'unzi'
|
|
||||||
USE = 'use '
|
|
||||||
VERIFY = 'vrfy'
|
|
||||||
VERIFYITEMEXISTS = 'vexi'
|
|
||||||
WAITFORMAILBOX = 'wamb'
|
|
||||||
WATCH = 'watc'
|
|
||||||
WIPE = 'wipe'
|
|
||||||
WIPE_PREVIEW = 'wipp'
|
|
||||||
# Usage:
|
|
||||||
# ACTION_NAMES[1] n Items - Delete 10 Users
|
|
||||||
# Item xxx ACTION_NAMES[0] - User xxx Deleted
|
|
||||||
# These values can be translated into other languages
|
|
||||||
_NAMES = {
|
|
||||||
ACCEPT: ['Accepted', 'Accept'],
|
|
||||||
ADD: ['Added', 'Add'],
|
|
||||||
ADD_PREVIEW: ['Added (Preview)', 'Add (Preview)'],
|
|
||||||
APPEND: ['Appended', 'Append'],
|
|
||||||
APPROVE: ['Approved', 'Approve'],
|
|
||||||
ARCHIVE: ['Archived', 'Archive'],
|
|
||||||
BACKUP: ['Backed up', 'Backup'],
|
|
||||||
BLOCK: ['Blocked', 'Block'],
|
|
||||||
CANCEL: ['Cancelled', 'Cancel'],
|
|
||||||
CANCEL_WIPE: ['Wipe Cancelled', 'Cancel Wipe'],
|
|
||||||
CHECK: ['Checked', 'Check'],
|
|
||||||
CLAIM: ['Claimed', 'Claim'],
|
|
||||||
CLAIM_OWNERSHIP: ['Ownership Claimed', 'Claim Ownership'],
|
|
||||||
CLEAR: ['Cleared', 'Clear'],
|
|
||||||
CLOSE: ['Closed', 'Close'],
|
|
||||||
COLLECT: ['Collected', 'Collect'],
|
|
||||||
COMMENT: ['Commented', 'Comment'],
|
|
||||||
COPY: ['Copied', 'Copy'],
|
|
||||||
COPY_MERGE: ['Copied(Merge)', 'Copy(Merge)'],
|
|
||||||
CREATE: ['Created', 'Create'],
|
|
||||||
CREATE_PREVIEW: ['Created (Preview)', 'Create (Preview)'],
|
|
||||||
CREATE_SHORTCUT: ['Created Shortcut', 'Create Shortcut'],
|
|
||||||
DEDUP: ['Duplicates Deleted', 'Delete Duplicates'],
|
|
||||||
DELETE: ['Deleted', 'Delete'],
|
|
||||||
DELETE_EMPTY: ['Deleted', 'Delete Empty'],
|
|
||||||
DELETE_PREVIEW: ['Deleted (Preview)', 'Delete (Preview)'],
|
|
||||||
DELETE_SHORTCUT: ['Deleted Shortcut', 'Delete Shortcut'],
|
|
||||||
DEPROVISION: ['Deprovisioned', 'Deprovision'],
|
|
||||||
DISABLE: ['Disabled', 'Disable'],
|
|
||||||
DOWNLOAD: ['Downloaded', 'Download'],
|
|
||||||
DRAFT: ['Drafted', 'Draft'],
|
|
||||||
EMPTY: ['Emptied', 'Empty'],
|
|
||||||
ENABLE: ['Enabled', 'Enable'],
|
|
||||||
END: ['Ended', 'End'],
|
|
||||||
EXISTS: ['Exists', 'Exists'],
|
|
||||||
EXPORT: ['Exported', 'Export'],
|
|
||||||
EXTRACT: ['Extracted', 'Extract'],
|
|
||||||
FORWARD: ['Forwarded', 'Forward'],
|
|
||||||
GET_COMMAND_RESULT: ['Got Command Result', 'Get Command Result'],
|
|
||||||
HIDE: ['Hidden', 'Hide'],
|
|
||||||
IMPORT: ['Imported', 'Import'],
|
|
||||||
INFO: ['Shown', 'Show Info'],
|
|
||||||
INITIALIZE: ['Initialized', 'Initialize'],
|
|
||||||
INSERT: ['Inserted', 'Insert'],
|
|
||||||
INVALIDATE: ['Invalidated', 'Invalidate'],
|
|
||||||
ISSUE_COMMAND: ['Command Issued', 'Issue Command'],
|
|
||||||
LIST: ['Listed', 'List'],
|
|
||||||
LOOKUP: ['Lookedup', 'Lookup'],
|
|
||||||
MERGE: ['Merged', 'Merge'],
|
|
||||||
MODIFY: ['Modified', 'Modify'],
|
|
||||||
MOVE: ['Moved', 'Move'],
|
|
||||||
MOVE_MERGE: ['Moved(Merge)', 'Move(Merge)'],
|
|
||||||
NOACTION: ['No Action', 'No Action'],
|
|
||||||
NOACTION_PREVIEW: ['No Action (Preview)', 'No Action (Preview)'],
|
|
||||||
OBLITERATE: ['Obliterated', 'Obliterate'],
|
|
||||||
PERFORM: ['Action Performed', 'Perform Action'],
|
|
||||||
PRE_PROVISIONED_DISABLE: ['PreProvisioned Disabled', 'PreProvisioned Disable'],
|
|
||||||
PRE_PROVISIONED_REENABLE: ['PreProvisioned Reenabled', 'PreProvisioned Reenable'],
|
|
||||||
PRINT: ['Printed', 'Print'],
|
|
||||||
PROCESS: ['Processed', 'Process'],
|
|
||||||
PROCESS_PREVIEW: ['Processed (Preview)', 'Process (Preview)'],
|
|
||||||
PURGE: ['Purged', 'Purge'],
|
|
||||||
RECREATE: ['Recreated', 'Recreate'],
|
|
||||||
REENABLE: ['Reenabled', 'Reenable'],
|
|
||||||
REFRESH: ['Refreshed', 'Refresh'],
|
|
||||||
RELABEL: ['Relabeled', 'Relabel'],
|
|
||||||
REMOVE: ['Removed', 'Remove'],
|
|
||||||
REMOVE_PREVIEW: ['Removed (Preview)', 'Remove (Preview)'],
|
|
||||||
RENAME: ['Renamed', 'Rename'],
|
|
||||||
REOPEN: ['Reopened', 'Reopen'],
|
|
||||||
REPLACE: ['Replaced', 'Replace'],
|
|
||||||
REPLACE_DOMAIN: ['Domain Replaced', 'Replace Domain'],
|
|
||||||
REPORT: ['Reported', 'Report'],
|
|
||||||
RESET_YUBIKEY_PIV: ['Yubikey PIV Reset', 'Reset Yubikey PIV'],
|
|
||||||
RESPOND: ['Responded', 'Respond'],
|
|
||||||
RESTORE: ['Restored', 'Restore'],
|
|
||||||
RESUBMIT: ['Resubmitted', 'Resubmit'],
|
|
||||||
RETAIN: ['Retained', 'Retain'],
|
|
||||||
RETRIEVE_DATA: ['Data Retrieved', 'Retrieve Data'],
|
|
||||||
REVOKE: ['Revoked', 'Revoke'],
|
|
||||||
SAVE: ['Saved', 'Save'],
|
|
||||||
SEND: ['Sent', 'Send'],
|
|
||||||
SENDEMAIL: ['Email Sent', 'Send Email'],
|
|
||||||
SENDREPLY: ['Reply Sent', 'Send Reply'],
|
|
||||||
SET: ['Set', 'Set'],
|
|
||||||
SETUP: ['Set Up', 'Set Up'],
|
|
||||||
SHARE: ['Shared', 'Share'],
|
|
||||||
SHOW: ['Shown', 'Show'],
|
|
||||||
SIGNOUT: ['Signed Out', 'Signout'],
|
|
||||||
SKIP: ['Skipped', 'Skip'],
|
|
||||||
SPAM: ['Marked as Spam', 'Mark as Spam'],
|
|
||||||
SUBMIT: ['Submitted', 'Submit'],
|
|
||||||
SUSPEND: ['Suspended', 'Suspend'],
|
|
||||||
SYNC: ['Synced', 'Sync'],
|
|
||||||
TRANSFER: ['Transferred', 'Transfer'],
|
|
||||||
TRANSFER_OWNERSHIP: ['Ownership Transferred', 'Transfer Ownership'],
|
|
||||||
TRASH: ['Trashed', 'Trash'],
|
|
||||||
TURNOFF2SV: ['2-Step Verification Turned Off', 'Turn Off 2-Step Verification'],
|
|
||||||
UNDELETE: ['Undeleted', 'Undelete'],
|
|
||||||
UNHIDE: ['Unhidden', 'Unhide'],
|
|
||||||
UNSUSPEND: ['Unsuspended', 'Unsuspend'],
|
|
||||||
UNTRASH: ['Untrashed', 'Untrash'],
|
|
||||||
UNZIP: ['Unzipped', 'Unzip'],
|
|
||||||
UPDATE: ['Updated', 'Update'],
|
|
||||||
UPDATE_MOVE: ['Updated/Moved', 'Update/Move'],
|
|
||||||
UPDATE_OWNER: ['Updated to Owner', 'Update to Owner'],
|
|
||||||
UPDATE_PREVIEW: ['Updated (Preview)', 'Update (Preview)'],
|
|
||||||
UPLOAD: ['Uploaded', 'Upload'],
|
|
||||||
USE: ['Used', 'Use'],
|
|
||||||
VERIFY: ['Verified', 'Verify'],
|
|
||||||
VERIFYITEMEXISTS: ['Verified Item Exists', 'Verify Item Exists'],
|
|
||||||
WAITFORMAILBOX: ['Mailbox is Setup', 'Check Mailbox is Setup'],
|
|
||||||
WATCH: ['Watched', 'Watch'],
|
|
||||||
WIPE: ['Wiped', 'Wipe'],
|
|
||||||
WIPE_PREVIEW: ['Wiped (Preview)', 'Wipe (Preview)'],
|
|
||||||
}
|
|
||||||
#
|
|
||||||
MODIFIER_CONTENTS_WITH = 'contents with'
|
|
||||||
MODIFIER_FOR = 'for'
|
|
||||||
MODIFIER_FROM = 'from'
|
|
||||||
MODIFIER_IN = 'in'
|
|
||||||
MODIFIER_INTO = 'into'
|
|
||||||
MODIFIER_PREVIOUSLY_IN = 'previously in'
|
|
||||||
MODIFIER_TO = 'to'
|
|
||||||
MODIFIER_WITH_COTEACHER_OWNER = 'with co-teacher as owner'
|
|
||||||
MODIFIER_WITH_NEW_TEACHER_OWNER = 'with new teacher as owner'
|
|
||||||
MODIFIER_WITH_CURRENT_OWNER = 'with current owner'
|
|
||||||
MODIFIER_WITH = 'with'
|
|
||||||
MODIFIER_WITH_CONTENT_FROM = 'with content from'
|
|
||||||
PREFIX_NOT = 'Not'
|
|
||||||
PREVIEW = 'Preview'
|
|
||||||
SUCCESS = 'Success'
|
|
||||||
SUFFIX_FAILED = 'Failed'
|
|
||||||
|
|
||||||
# Shared state across all instances (class-level)
|
|
||||||
_action = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def action(self):
|
|
||||||
return GamAction._action
|
|
||||||
@action.setter
|
|
||||||
def action(self, value):
|
|
||||||
GamAction._action = value
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
pass # state is shared at class level
|
|
||||||
|
|
||||||
def Set(self, action):
|
|
||||||
GamAction._action = action
|
|
||||||
|
|
||||||
def Get(self):
|
|
||||||
return GamAction._action
|
|
||||||
|
|
||||||
def ToPerform(self):
|
|
||||||
return self._NAMES[GamAction._action][1]
|
|
||||||
|
|
||||||
def Performed(self):
|
|
||||||
return self._NAMES[GamAction._action][0]
|
|
||||||
|
|
||||||
def Failed(self):
|
|
||||||
return f'{self._NAMES[GamAction._action][1]} {self.SUFFIX_FAILED}'
|
|
||||||
|
|
||||||
def NotPerformed(self):
|
|
||||||
actionWords = self._NAMES[GamAction._action][0].split(' ')
|
|
||||||
if len(actionWords) != 2:
|
|
||||||
return f'{self.PREFIX_NOT} {self._NAMES[GamAction._action][0]}'
|
|
||||||
return f'{actionWords[0]} {self.PREFIX_NOT} {actionWords[1]}'
|
|
||||||
|
|
||||||
def PerformedName(self, action):
|
|
||||||
return self._NAMES[action][0]
|
|
||||||
|
|
||||||
def ToPerformName(self, action):
|
|
||||||
return self._NAMES[action][1]
|
|
||||||
|
|
||||||
def csvFormat(self):
|
|
||||||
return GamAction._action == self.PRINT
|
|
||||||
@@ -1,849 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""Google API resources
|
|
||||||
|
|
||||||
"""
|
|
||||||
# APIs
|
|
||||||
ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
|
||||||
ALERTCENTER = 'alertcenter'
|
|
||||||
ANALYTICS_ADMIN = 'analyticsadmin'
|
|
||||||
CALENDAR = 'calendar'
|
|
||||||
BUSINESSACCOUNTMANAGEMENT = 'mybusinessaccountmanagement'
|
|
||||||
CBCM = 'cbcm'
|
|
||||||
CHAT = 'chat'
|
|
||||||
CHAT_CUSTOM_EMOJIS = 'chatcustomemojis'
|
|
||||||
CHAT_EVENTS = 'chatevents'
|
|
||||||
CHAT_MEMBERSHIPS = 'chatmemberships'
|
|
||||||
CHAT_MEMBERSHIPS_ADMIN = 'chatmembershipsadmin'
|
|
||||||
CHAT_MESSAGES = 'chatmessages'
|
|
||||||
CHAT_SECTIONS = 'chatsections'
|
|
||||||
CHAT_SPACES = 'chatspaces'
|
|
||||||
CHAT_SPACES_ADMIN = 'chatspacesadmin'
|
|
||||||
CHAT_SPACES_DELETE = 'chatspacesdelete'
|
|
||||||
CHAT_SPACES_DELETE_ADMIN = 'chatspacesdeleteadmin'
|
|
||||||
CHROMEMANAGEMENT = 'chromemanagement'
|
|
||||||
CHROMEMANAGEMENT_APPDETAILS = 'chromemanagementappdetails'
|
|
||||||
CHROMEMANAGEMENT_CHROMEPROFILES = 'chromemanagementchromeprofiles'
|
|
||||||
CHROMEMANAGEMENT_TELEMETRY = 'chromemanagementtelemetry'
|
|
||||||
CHROMEPOLICY = 'chromepolicy'
|
|
||||||
CHROMEVERSIONHISTORY = 'versionhistory'
|
|
||||||
CLASSROOM = 'classroom'
|
|
||||||
CLOUDCHANNEL = 'cloudchannel'
|
|
||||||
CLOUDIDENTITY_DEVICES = 'cloudidentitydevices'
|
|
||||||
CLOUDIDENTITY_GROUPS = 'cloudidentitygroups'
|
|
||||||
CLOUDIDENTITY_INBOUND_SSO = 'cloudidentityinboundsso'
|
|
||||||
CLOUDIDENTITY_ORGUNITS = 'cloudidentityorgunits'
|
|
||||||
CLOUDIDENTITY_ORGUNITS_BETA = 'cloudidentityorgunitsbeta'
|
|
||||||
CLOUDIDENTITY_POLICY = 'cloudidentitypolicy'
|
|
||||||
CLOUDIDENTITY_USERINVITATIONS = 'cloudidentityuserinvitations'
|
|
||||||
CLOUDRESOURCEMANAGER = 'cloudresourcemanager'
|
|
||||||
CLOUDRESOURCEMANAGERV1 = 'cloudresourcemanagerv1'
|
|
||||||
CONTACTS = 'contacts'
|
|
||||||
CONTACTDELEGATION = 'contactdelegation'
|
|
||||||
DATATRANSFER = 'datatransfer'
|
|
||||||
DIRECTORY = 'directory'
|
|
||||||
DOCS = 'docs'
|
|
||||||
DRIVE2 = 'drive2'
|
|
||||||
DRIVE3 = 'drive3'
|
|
||||||
DRIVETD = 'drivetd'
|
|
||||||
DRIVEACTIVITY = 'driveactivity'
|
|
||||||
DRIVELABELS = 'drivelabels'
|
|
||||||
DRIVELABELS_ADMIN = 'drivelabelsadmin'
|
|
||||||
DRIVELABELS_USER = 'drivelabelsuser'
|
|
||||||
EMAIL_AUDIT = 'email-audit'
|
|
||||||
FORMS = 'forms'
|
|
||||||
GMAIL = 'gmail'
|
|
||||||
GROUPSMIGRATION = 'groupsmigration'
|
|
||||||
GROUPSSETTINGS = 'groupssettings'
|
|
||||||
IAM = 'iam'
|
|
||||||
IAM_CREDENTIALS = 'iamcredentials'
|
|
||||||
KEEP = 'keep'
|
|
||||||
LICENSING = 'licensing'
|
|
||||||
LOOKERSTUDIO = 'datastudio'
|
|
||||||
MEET_SPACES = 'meet'
|
|
||||||
MEET_READONLY = 'meetreadonly'
|
|
||||||
OAUTH2 = 'oauth2'
|
|
||||||
ORGPOLICY = 'orgpolicy'
|
|
||||||
PEOPLE = 'people'
|
|
||||||
PEOPLE_DIRECTORY = 'peopledirectory'
|
|
||||||
PEOPLE_OTHERCONTACTS = 'peopleothercontacts'
|
|
||||||
PRINTERS = 'printers'
|
|
||||||
PUBSUB = 'pubsub'
|
|
||||||
REPORTS = 'reports'
|
|
||||||
RESELLER = 'reseller'
|
|
||||||
SEARCHCONSOLE = 'searchconsole'
|
|
||||||
SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
|
||||||
SERVICEMANAGEMENT = 'servicemanagement'
|
|
||||||
SERVICEUSAGE = 'serviceusage'
|
|
||||||
SHEETS = 'sheets'
|
|
||||||
SHEETSTD = 'sheetstd'
|
|
||||||
SITEVERIFICATION = 'siteVerification'
|
|
||||||
STORAGE = 'storage'
|
|
||||||
STORAGEREAD = 'storageread'
|
|
||||||
STORAGEWRITE = 'storagewrite'
|
|
||||||
TAGMANAGER = 'tagmanager'
|
|
||||||
TAGMANAGER_USERS = 'tagmanagerusers'
|
|
||||||
TASKS = 'tasks'
|
|
||||||
VAULT = 'vault'
|
|
||||||
YOUTUBE = 'youtube'
|
|
||||||
#
|
|
||||||
CHROMEVERSIONHISTORY_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms'
|
|
||||||
DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive'
|
|
||||||
DRIVE_FILE_SCOPE = 'https://www.googleapis.com/auth/drive.file'
|
|
||||||
DRIVE_READONLY_SCOPE = 'https://www.googleapis.com/auth/drive.readonly'
|
|
||||||
GMAIL_SEND_SCOPE = 'https://www.googleapis.com/auth/gmail.send'
|
|
||||||
GOOGLE_AUTH_PROVIDER_X509_CERT_URL = 'https://www.googleapis.com/oauth2/v1/certs'
|
|
||||||
GOOGLE_OAUTH2_ENDPOINT = 'https://accounts.google.com/o/oauth2/v2/auth'
|
|
||||||
GOOGLE_OAUTH2_TOKEN_ENDPOINT = 'https://oauth2.googleapis.com/token'
|
|
||||||
CLOUD_PLATFORM_SCOPE = 'https://www.googleapis.com/auth/cloud-platform'
|
|
||||||
IAM_SCOPE = 'https://www.googleapis.com/auth/iam'
|
|
||||||
PEOPLE_SCOPE = 'https://www.googleapis.com/auth/contacts'
|
|
||||||
STORAGE_READONLY_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_only'
|
|
||||||
STORAGE_READWRITE_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_write'
|
|
||||||
USERINFO_EMAIL_SCOPE = 'https://www.googleapis.com/auth/userinfo.email' # email
|
|
||||||
USERINFO_PROFILE_SCOPE = 'https://www.googleapis.com/auth/userinfo.profile' # profile
|
|
||||||
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
|
||||||
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
|
||||||
NUM_CLIENT_SCOPES_ERROR_LIMIT = 48
|
|
||||||
#
|
|
||||||
JWT_APIS = {
|
|
||||||
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
|
||||||
CHAT: ['https://www.googleapis.com/auth/chat.bot'],
|
|
||||||
CLOUDRESOURCEMANAGER: [CLOUD_PLATFORM_SCOPE],
|
|
||||||
IAM: [IAM_SCOPE],
|
|
||||||
ORGPOLICY: [CLOUD_PLATFORM_SCOPE],
|
|
||||||
}
|
|
||||||
#
|
|
||||||
SCOPELESS_APIS = {
|
|
||||||
CHROMEVERSIONHISTORY,
|
|
||||||
OAUTH2,
|
|
||||||
SERVICEACCOUNTLOOKUP,
|
|
||||||
}
|
|
||||||
#
|
|
||||||
|
|
||||||
# Scopes not in the discovery doc that are still valid for the API.
|
|
||||||
EXTRA_SCOPES = {
|
|
||||||
CLOUDRESOURCEMANAGER: ['https://www.googleapis.com/auth/cloudplatformfolders',
|
|
||||||
'https://www.googleapis.com/auth/cloudplatformfolders.readonly',
|
|
||||||
'https://www.googleapis.com/auth/cloudplatformprojects',
|
|
||||||
'https://www.googleapis.com/auth/cloudplatformprojects.readonly',
|
|
||||||
'https://www.googleapis.com/auth/cloudplatformorganizations',
|
|
||||||
'https://www.googleapis.com/auth/cloudplatformorganizations.readonly',
|
|
||||||
],
|
|
||||||
VAULT: ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly'],
|
|
||||||
}
|
|
||||||
EXTRA_SCOPES[CLOUDRESOURCEMANAGERV1] = EXTRA_SCOPES[CLOUDRESOURCEMANAGER]
|
|
||||||
|
|
||||||
APIS_NEEDING_ACCESS_TOKEN = {
|
|
||||||
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
|
||||||
}
|
|
||||||
#
|
|
||||||
DEPRECATED_SCOPES = {
|
|
||||||
'https://www.googleapis.com/auth/cloud-identity',
|
|
||||||
'https://www.googleapis.com/auth/cloud-platform',
|
|
||||||
'https://www.googleapis.com/auth/iam',
|
|
||||||
}
|
|
||||||
#
|
|
||||||
REFRESH_PERM_ERRORS = [
|
|
||||||
'invalid_grant: reauth related error (rapt_required)', # no way to reauth today
|
|
||||||
'invalid_grant: Token has been expired or revoked',
|
|
||||||
]
|
|
||||||
|
|
||||||
OAUTH2_TOKEN_ERRORS = [
|
|
||||||
'access_denied',
|
|
||||||
'access_denied: Requested client not authorized',
|
|
||||||
'access_denied: Account restricted',
|
|
||||||
'internal_failure: Backend Error',
|
|
||||||
'internal_failure: None',
|
|
||||||
'invalid_account: Forbidden',
|
|
||||||
'invalid_grant',
|
|
||||||
'invalid_grant: Bad Request',
|
|
||||||
'invalid_grant: Invalid email or User ID',
|
|
||||||
'invalid_grant: Not a valid email',
|
|
||||||
'invalid_grant: Invalid JWT: No valid verifier found for issuer',
|
|
||||||
'invalid_grant: reauth related error (invalid_rapt)',
|
|
||||||
'invalid_grant: The account has been deleted',
|
|
||||||
'invalid_request: Invalid impersonation prn email address'
|
|
||||||
]
|
|
||||||
OAUTH2_UNAUTHORIZED_ERRORS = [
|
|
||||||
'unauthorized_client: Client is unauthorized to retrieve access tokens using this method',
|
|
||||||
'unauthorized_client: Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested',
|
|
||||||
'unauthorized_client: Unauthorized client or scope in request',
|
|
||||||
]
|
|
||||||
|
|
||||||
PROJECT_APIS = [
|
|
||||||
'accesscontextmanager.googleapis.com',
|
|
||||||
'admin.googleapis.com',
|
|
||||||
'alertcenter.googleapis.com',
|
|
||||||
'analyticsadmin.googleapis.com',
|
|
||||||
# 'audit.googleapis.com',
|
|
||||||
'mybusinessaccountmanagement.googleapis.com',
|
|
||||||
'calendar-json.googleapis.com',
|
|
||||||
'chat.googleapis.com',
|
|
||||||
'chromemanagement.googleapis.com',
|
|
||||||
'chromepolicy.googleapis.com',
|
|
||||||
'classroom.googleapis.com',
|
|
||||||
'cloudchannel.googleapis.com',
|
|
||||||
'cloudidentity.googleapis.com',
|
|
||||||
'cloudresourcemanager.googleapis.com',
|
|
||||||
'contacts.googleapis.com',
|
|
||||||
'datastudio.googleapis.com',
|
|
||||||
'docs.googleapis.com',
|
|
||||||
'drive.googleapis.com',
|
|
||||||
'driveactivity.googleapis.com',
|
|
||||||
'drivelabels.googleapis.com',
|
|
||||||
'forms.googleapis.com',
|
|
||||||
'gmail.googleapis.com',
|
|
||||||
'groupsmigration.googleapis.com',
|
|
||||||
'groupssettings.googleapis.com',
|
|
||||||
'iam.googleapis.com',
|
|
||||||
'keep.googleapis.com',
|
|
||||||
'licensing.googleapis.com',
|
|
||||||
'meet.googleapis.com',
|
|
||||||
'people.googleapis.com',
|
|
||||||
'pubsub.googleapis.com',
|
|
||||||
'reseller.googleapis.com',
|
|
||||||
'searchconsole.googleapis.com',
|
|
||||||
'sheets.googleapis.com',
|
|
||||||
'siteverification.googleapis.com',
|
|
||||||
'storage-api.googleapis.com',
|
|
||||||
'tagmanager.googleapis.com',
|
|
||||||
'tasks.googleapis.com',
|
|
||||||
'vault.googleapis.com',
|
|
||||||
'youtube.googleapis.com',
|
|
||||||
]
|
|
||||||
|
|
||||||
_INFO = {
|
|
||||||
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
|
||||||
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
|
||||||
BUSINESSACCOUNTMANAGEMENT: {'name': 'Business Account Management API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
|
||||||
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
|
||||||
CHAT: {'name': 'Chat API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CHAT_CUSTOM_EMOJIS: {'name': 'Chat API - Custom Emojis', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_EVENTS: {'name': 'Chat API - Events', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_MEMBERSHIPS: {'name': 'Chat API - Memberships', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_MEMBERSHIPS_ADMIN: {'name': 'Chat API - Memberships Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_MESSAGES: {'name': 'Chat API - Messages', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_SECTIONS: {'name': 'Chat API - User Sections', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_SPACES: {'name': 'Chat API - Spaces', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_SPACES_ADMIN: {'name': 'Chat API - Spaces Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_SPACES_DELETE: {'name': 'Chat API - Spaces Delete', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CHAT_SPACES_DELETE_ADMIN: {'name': 'Chat API - Spaces Delete Admin', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHAT},
|
|
||||||
CLASSROOM: {'name': 'Classroom API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CHROMEMANAGEMENT: {'name': 'Chrome Management API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CHROMEMANAGEMENT_APPDETAILS: {'name': 'Chrome Management API - AppDetails', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
|
||||||
CHROMEMANAGEMENT_TELEMETRY: {'name': 'Chrome Management API - Telemetry', 'version': 'v1', 'v2discovery': True, 'mappedAPI': CHROMEMANAGEMENT},
|
|
||||||
CHROMEPOLICY: {'name': 'Chrome Policy API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CHROMEVERSIONHISTORY: {'name': 'Chrome Version History API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CLOUDCHANNEL: {'name': 'Cloud Channel API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity API - Devices', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity API - Groups', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_INBOUND_SSO: {'name': 'Cloud Identity API - Inbound SSO Settings', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity API - Policy', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity API - User Invitations', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDRESOURCEMANAGER: {'name': 'Resource Manager API v3', 'version': 'v3', 'v2discovery': True},
|
|
||||||
CLOUDRESOURCEMANAGERV1: {'name': 'Resource Manager API v1', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudresourcemanager'},
|
|
||||||
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
|
||||||
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
|
||||||
DATATRANSFER: {'name': 'Data Transfer API', 'version': 'datatransfer_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
|
||||||
DIRECTORY: {'name': 'Directory API', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
|
||||||
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
||||||
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
||||||
DRIVETD: {'name': 'Drive API v3 - write todrive data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
||||||
DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
|
|
||||||
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},
|
|
||||||
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
KEEP: {'name': 'Keep API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
|
||||||
MEET_SPACES: {'name': 'Meet API - Manage/Display Meeting Spaces', 'version': 'v2', 'v2discovery': True},
|
|
||||||
MEET_READONLY: {'name': 'Meet API - Read Meeting Spaces metadata', 'version': 'v2', 'v2discovery': True, 'mappedAPI': MEET_SPACES},
|
|
||||||
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
|
||||||
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
|
||||||
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
PEOPLE_DIRECTORY: {'name': 'People Directory API', 'version': 'v1', 'v2discovery': True, 'mappedAPI': PEOPLE},
|
|
||||||
PEOPLE_OTHERCONTACTS: {'name': 'People API - Other Contacts', 'version': 'v1', 'v2discovery': True, 'mappedAPI': PEOPLE},
|
|
||||||
PRINTERS: {'name': 'Directory API - Printers', 'version': 'directory_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
|
||||||
PUBSUB: {'name': 'Pub / Sub API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
REPORTS: {'name': 'Reports API', 'version': 'reports_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
|
||||||
RESELLER: {'name': 'Reseller API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
SEARCHCONSOLE: {'name': 'Search Console API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
SERVICEACCOUNTLOOKUP: {'name': 'Service Account Lookup pseudo-API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
|
||||||
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
|
||||||
SHEETSTD: {'name': 'Sheets API - write todrive data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
||||||
SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
|
||||||
STORAGEWRITE: {'name': 'Cloud Storage API - Write', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
|
||||||
TAGMANAGER: {'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags', 'version': 'v2', 'v2discovery': True},
|
|
||||||
TAGMANAGER_USERS: {'name': 'Tag Manager API - Users', 'version': 'v2', 'v2discovery': True, 'mappedAPI': TAGMANAGER},
|
|
||||||
TASKS: {'name': 'Tasks API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
VAULT: {'name': 'Vault API', 'version': 'v1', 'v2discovery': True},
|
|
||||||
YOUTUBE: {'name': 'Youtube API', 'version': 'v3', 'v2discovery': True},
|
|
||||||
}
|
|
||||||
|
|
||||||
READONLY = ['readonly',]
|
|
||||||
|
|
||||||
_CLIENT_SCOPES = [
|
|
||||||
{'name': 'Calendar API',
|
|
||||||
'api': CALENDAR,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/calendar'},
|
|
||||||
{'name': 'Chrome Browser Cloud Management API',
|
|
||||||
'api': CBCM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.device.chromebrowsers'},
|
|
||||||
{'name': 'Chrome Management API - readonly',
|
|
||||||
'api': CHROMEMANAGEMENT,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.reports.readonly'},
|
|
||||||
{'name': 'Chrome Management API - AppDetails readonly',
|
|
||||||
'api': CHROMEMANAGEMENT_APPDETAILS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.appdetails.readonly'},
|
|
||||||
{'name': 'Chrome Management API - Profiles',
|
|
||||||
'api': CHROMEMANAGEMENT_CHROMEPROFILES,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.profiles'},
|
|
||||||
{'name': 'Chrome Management API - Telemetry readonly',
|
|
||||||
'api': CHROMEMANAGEMENT_TELEMETRY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.telemetry.readonly'},
|
|
||||||
{'name': 'Chrome Policy API',
|
|
||||||
'api': CHROMEPOLICY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.policy'},
|
|
||||||
{'name': 'Chrome Printer Management API',
|
|
||||||
'api': PRINTERS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.chrome.printers'},
|
|
||||||
{'name': 'Chrome Version History API',
|
|
||||||
'api': CHROMEVERSIONHISTORY,
|
|
||||||
'scope': ''},
|
|
||||||
{'name': 'Classroom API - Courses',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.courses'},
|
|
||||||
{'name': 'Classroom API - Course Announcements',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.announcements'},
|
|
||||||
{'name': 'Classroom API - Course Topics',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.topics'},
|
|
||||||
{'name': 'Classroom API - Course Work/Materials',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.courseworkmaterials'},
|
|
||||||
{'name': 'Classroom API - Course Work/Submissions',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.coursework.students'},
|
|
||||||
{'name': 'Classroom API - Student Guardians',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.guardianlinks.students'},
|
|
||||||
{'name': 'Classroom API - Profile Emails',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
|
||||||
{'name': 'Classroom API - Profile Photos',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
|
||||||
{'name': 'Classroom API - Rosters',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.rosters'},
|
|
||||||
{'name': 'Cloud Channel API',
|
|
||||||
'api': CLOUDCHANNEL,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
|
||||||
{'name': 'Cloud Identity API - Groups',
|
|
||||||
'api': CLOUDIDENTITY_GROUPS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
|
||||||
{'name': 'Cloud Identity API - Inbound SSO Settings',
|
|
||||||
'api': CLOUDIDENTITY_INBOUND_SSO,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.inboundsso'},
|
|
||||||
{'name': 'Cloud Identity API - OrgUnits Beta',
|
|
||||||
'api': CLOUDIDENTITY_ORGUNITS_BETA,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.orgunits'},
|
|
||||||
{'name': 'Cloud Identity API - Policy',
|
|
||||||
'api': CLOUDIDENTITY_POLICY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'roByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
|
||||||
{'name': 'Cloud Identity API - User Invitations',
|
|
||||||
'api': CLOUDIDENTITY_USERINVITATIONS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
|
||||||
{'name': 'Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)',
|
|
||||||
'api': STORAGEREAD,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': STORAGE_READONLY_SCOPE},
|
|
||||||
{'name': 'Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)',
|
|
||||||
'api': STORAGEWRITE,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': STORAGE_READWRITE_SCOPE},
|
|
||||||
{'name': 'Contacts API - Domain Shared Contacts',
|
|
||||||
'api': CONTACTS,
|
|
||||||
'scope': 'https://www.google.com/m8/feeds'},
|
|
||||||
{'name': 'Contact Delegation API',
|
|
||||||
'api': CONTACTDELEGATION,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.contact.delegation'},
|
|
||||||
{'name': 'Data Transfer API',
|
|
||||||
'api': DATATRANSFER,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.datatransfer'},
|
|
||||||
{'name': 'Directory API - Chrome OS Devices',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.device.chromeos'},
|
|
||||||
{'name': 'Directory API - Customers',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.customer'},
|
|
||||||
{'name': 'Directory API - Domains',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.domain'},
|
|
||||||
{'name': 'Directory API - Groups',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.group'},
|
|
||||||
{'name': 'Directory API - Mobile Devices Directory',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': ['readonly', 'actiononly'],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.device.mobile'},
|
|
||||||
{'name': 'Directory API - Organizational Units',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.orgunit'},
|
|
||||||
{'name': 'Directory API - Resource Calendars',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.resource.calendar'},
|
|
||||||
{'name': 'Directory API - Roles',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.rolemanagement'},
|
|
||||||
{'name': 'Directory API - User Schemas',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.userschema'},
|
|
||||||
{'name': 'Directory API - User Security',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.user.security'},
|
|
||||||
{'name': 'Directory API - Users',
|
|
||||||
'api': DIRECTORY,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.user'},
|
|
||||||
{'name': 'Email Audit API',
|
|
||||||
'api': EMAIL_AUDIT,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://apps-apis.google.com/a/feeds/compliance/audit/'},
|
|
||||||
{'name': 'Groups Migration API',
|
|
||||||
'api': GROUPSMIGRATION,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
|
||||||
{'name': 'Groups Settings API',
|
|
||||||
'api': GROUPSSETTINGS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.settings'},
|
|
||||||
{'name': 'License Manager API',
|
|
||||||
'api': LICENSING,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.licensing'},
|
|
||||||
{'name': 'People Directory API - readonly',
|
|
||||||
'api': PEOPLE_DIRECTORY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
|
||||||
{'name': 'People API',
|
|
||||||
'api': PEOPLE,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': PEOPLE_SCOPE},
|
|
||||||
{'name': 'Pub / Sub API',
|
|
||||||
'api': PUBSUB,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/pubsub'},
|
|
||||||
{'name': 'Reports API - Audit Reports readonly',
|
|
||||||
'api': REPORTS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.reports.audit.readonly'},
|
|
||||||
{'name': 'Reports API - Usage Reports readonly',
|
|
||||||
'api': REPORTS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.reports.usage.readonly'},
|
|
||||||
{'name': 'Reseller API',
|
|
||||||
'api': RESELLER,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
|
||||||
{'name': 'Resource Manager API - Organizations readonly',
|
|
||||||
'api': CLOUDRESOURCEMANAGER,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloudplatformorganizations.readonly'},
|
|
||||||
{'name': 'Resource Manager API - Projects readonly',
|
|
||||||
'api': CLOUDRESOURCEMANAGER,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloudplatformprojects.readonly'},
|
|
||||||
{'name': 'Service Account Lookup pseudo-API',
|
|
||||||
'api': SERVICEACCOUNTLOOKUP,
|
|
||||||
'scope': ''},
|
|
||||||
{'name': 'Site Verification API',
|
|
||||||
'api': SITEVERIFICATION,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
|
||||||
{'name': 'Vault API',
|
|
||||||
'api': VAULT,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/ediscovery'},
|
|
||||||
]
|
|
||||||
|
|
||||||
_COMMANDDATA_CLIENT_SCOPES = [
|
|
||||||
{'name': 'Drive API - commanddata_clientaccess',
|
|
||||||
'api': DRIVE3,
|
|
||||||
'scope': DRIVE_READONLY_SCOPE},
|
|
||||||
{'name': 'Sheets API - commanddata_clientaccess readonly',
|
|
||||||
'api': SHEETS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
|
||||||
]
|
|
||||||
|
|
||||||
_TODRIVE_CLIENT_SCOPES = [
|
|
||||||
{'name': 'Drive API - todrive_clientaccess',
|
|
||||||
'api': DRIVE3,
|
|
||||||
'scope': DRIVE_SCOPE},
|
|
||||||
{'name': 'Drive File API - todrive_clientaccess',
|
|
||||||
'api': DRIVE3,
|
|
||||||
'scope': DRIVE_FILE_SCOPE},
|
|
||||||
{'name': 'Gmail API - todrive_clientaccess',
|
|
||||||
'api': GMAIL,
|
|
||||||
'scope': GMAIL_SEND_SCOPE},
|
|
||||||
{'name': 'Sheets API - todrive_clientaccess',
|
|
||||||
'api': SHEETS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
||||||
]
|
|
||||||
|
|
||||||
OAUTH2SA_SCOPES = 'us_scopes'
|
|
||||||
|
|
||||||
_SVCACCT_SCOPES = [
|
|
||||||
{'name': 'AlertCenter API',
|
|
||||||
'api': ALERTCENTER,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
|
||||||
{'name': 'Analytics Admin API - readonly',
|
|
||||||
'api': ANALYTICS_ADMIN,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
|
||||||
{'name': 'Business Account Management API',
|
|
||||||
'api': BUSINESSACCOUNTMANAGEMENT,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/business.manage'},
|
|
||||||
{'name': 'Calendar API',
|
|
||||||
'api': CALENDAR,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/calendar'},
|
|
||||||
{'name': 'Chat API - Custom Emojis',
|
|
||||||
'api': CHAT_CUSTOM_EMOJIS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.customemojis'},
|
|
||||||
{'name': 'Chat API - Memberships',
|
|
||||||
'api': CHAT_MEMBERSHIPS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.memberships'},
|
|
||||||
{'name': 'Chat API - Memberships Admin',
|
|
||||||
'api': CHAT_MEMBERSHIPS_ADMIN,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.admin.memberships'},
|
|
||||||
{'name': 'Chat API - Messages',
|
|
||||||
'api': CHAT_MESSAGES,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.messages'},
|
|
||||||
{'name': 'Chat API - User Sections',
|
|
||||||
'api': CHAT_SECTIONS,
|
|
||||||
'offByDefault': True,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.users.sections'},
|
|
||||||
{'name': 'Chat API - Spaces',
|
|
||||||
'api': CHAT_SPACES,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.spaces'},
|
|
||||||
{'name': 'Chat API - Spaces Admin',
|
|
||||||
'api': CHAT_SPACES_ADMIN,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
|
|
||||||
{'name': 'Chat API - Spaces Delete',
|
|
||||||
'api': CHAT_SPACES_DELETE,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.delete'},
|
|
||||||
{'name': 'Chat API - Spaces Delete Admin',
|
|
||||||
'api': CHAT_SPACES_DELETE_ADMIN,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.admin.delete'},
|
|
||||||
{'name': 'Classroom API - Course Announcements',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.announcements'},
|
|
||||||
{'name': 'Classroom API - Course Topics',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.topics'},
|
|
||||||
{'name': 'Classroom API - Course Work/Materials',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.courseworkmaterials'},
|
|
||||||
{'name': 'Classroom API - Course Work/Submissions',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.coursework.students'},
|
|
||||||
{'name': 'Classroom API - Profile Emails',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
|
||||||
{'name': 'Classroom API - Profile Photos',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
|
||||||
{'name': 'Classroom API - Rosters',
|
|
||||||
'api': CLASSROOM,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.rosters'},
|
|
||||||
{'name': 'Cloud Identity Devices API',
|
|
||||||
'api': CLOUDIDENTITY_DEVICES,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.devices'},
|
|
||||||
# {'name': 'Cloud Identity API - Policy',
|
|
||||||
# 'api': CLOUDIDENTITY_POLICY,
|
|
||||||
# 'subscopes': READONLY,
|
|
||||||
# 'roByDefault': True,
|
|
||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
|
||||||
# {'name': 'Cloud Identity User Invitations API',
|
|
||||||
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
|
||||||
# 'subscopes': READONLY,
|
|
||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity'},
|
|
||||||
# {'name': 'Contacts API - Users',
|
|
||||||
# 'api': CONTACTS,
|
|
||||||
# 'scope': 'https://www.google.com/m8/feeds'},
|
|
||||||
{'name': 'Drive API',
|
|
||||||
'api': DRIVE3,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': DRIVE_SCOPE},
|
|
||||||
{'name': 'Drive Activity API v2 - must pair with Drive API',
|
|
||||||
'api': DRIVEACTIVITY,
|
|
||||||
'scope': [DRIVE_READONLY_SCOPE,
|
|
||||||
'https://www.googleapis.com/auth/drive.activity']},
|
|
||||||
{'name': 'Drive Labels API - Admin',
|
|
||||||
'api': DRIVELABELS_ADMIN,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/drive.admin.labels'},
|
|
||||||
{'name': 'Drive Labels API - User',
|
|
||||||
'api': DRIVELABELS_USER,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/drive.labels'},
|
|
||||||
{'name': 'Docs API',
|
|
||||||
'api': DOCS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/documents'},
|
|
||||||
{'name': 'Forms API - must pair with Drive API',
|
|
||||||
'api': FORMS,
|
|
||||||
'scope': [DRIVE_READONLY_SCOPE,
|
|
||||||
'https://www.googleapis.com/auth/forms.body',
|
|
||||||
'https://www.googleapis.com/auth/forms.responses.readonly']},
|
|
||||||
{'name': 'Gmail API - Full Access (Labels, Messages)',
|
|
||||||
'api': GMAIL,
|
|
||||||
'scope': 'https://mail.google.com/'},
|
|
||||||
{'name': 'Gmail API - Full Access (Labels, Messages) except delete message',
|
|
||||||
'api': GMAIL,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
|
||||||
{'name': 'Gmail API - Basic Settings (Filters, IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
|
||||||
'api': GMAIL,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
|
||||||
{'name': 'Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write',
|
|
||||||
'api': GMAIL,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
|
||||||
# {'name': 'Identity and Access Management API',
|
|
||||||
# 'api': IAM,
|
|
||||||
# 'offByDefault': True,
|
|
||||||
# 'scope': CLOUD_PLATFORM_SCOPE},
|
|
||||||
{'name': 'Keep API',
|
|
||||||
'api': KEEP,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/keep'},
|
|
||||||
{'name': 'Looker Studio API',
|
|
||||||
'api': LOOKERSTUDIO,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
|
||||||
{'name': 'Meet API - Manage/Display Meeting Spaces',
|
|
||||||
'api': MEET_SPACES,
|
|
||||||
'scope': ['https://www.googleapis.com/auth/meetings.space.created',
|
|
||||||
'https://www.googleapis.com/auth/meetings.space.settings']},
|
|
||||||
{'name': 'Meet API - Read Meeting Spaces metadata readonly',
|
|
||||||
'api': MEET_READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/meetings.space.readonly'},
|
|
||||||
{'name': 'OAuth2 API',
|
|
||||||
'api': OAUTH2,
|
|
||||||
'scope': USERINFO_PROFILE_SCOPE},
|
|
||||||
{'name': 'People API',
|
|
||||||
'api': PEOPLE,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': PEOPLE_SCOPE},
|
|
||||||
{'name': 'People Directory API - readonly',
|
|
||||||
'api': PEOPLE_DIRECTORY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
|
||||||
{'name': 'People API - Other Contacts - readonly',
|
|
||||||
'api': PEOPLE_OTHERCONTACTS,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/contacts.other.readonly'},
|
|
||||||
{'name': 'Search Console API - readonly',
|
|
||||||
'api': SEARCHCONSOLE,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/webmasters.readonly'},
|
|
||||||
{'name': 'Sheets API',
|
|
||||||
'api': SHEETS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
||||||
{'name': 'Site Verification API',
|
|
||||||
'api': SITEVERIFICATION,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
|
||||||
{'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags - readonly',
|
|
||||||
'api': TAGMANAGER,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/tagmanager.readonly'},
|
|
||||||
{'name': 'Tag Manager API - Users',
|
|
||||||
'api': TAGMANAGER_USERS,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/tagmanager.manage.users'},
|
|
||||||
{'name': 'Tasks API',
|
|
||||||
'api': TASKS,
|
|
||||||
'subscopes': READONLY,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/tasks'},
|
|
||||||
{'name': 'Youtube API - readonly',
|
|
||||||
'api': YOUTUBE,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/youtube.readonly'},
|
|
||||||
]
|
|
||||||
|
|
||||||
_SVCACCT_SPECIAL_SCOPES = [
|
|
||||||
{'name': 'Drive API - write todrive data - has access to all Drive',
|
|
||||||
'api': DRIVETD,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': DRIVE_SCOPE},
|
|
||||||
{'name': 'Gmail API - Full Access - readonly',
|
|
||||||
'api': GMAIL,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.readonly'},
|
|
||||||
{'name': 'Gmail API - Send Messages - including todrive',
|
|
||||||
'api': GMAIL,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': GMAIL_SEND_SCOPE},
|
|
||||||
{'name': 'Sheets API - write todrive data - has access to all Sheets',
|
|
||||||
'api': SHEETSTD,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
||||||
]
|
|
||||||
|
|
||||||
_USER_SVCACCT_ONLY_SCOPES = [
|
|
||||||
{'name': 'Groups Migration API',
|
|
||||||
'api': GROUPSMIGRATION,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
|
||||||
]
|
|
||||||
|
|
||||||
def getAPIName(api):
|
|
||||||
return _INFO[api]['name']
|
|
||||||
|
|
||||||
def getVersion(api):
|
|
||||||
version = _INFO[api]['version']
|
|
||||||
v2discovery = _INFO[api]['v2discovery']
|
|
||||||
api = _INFO[api].get('mappedAPI', api)
|
|
||||||
return (api, version, v2discovery)
|
|
||||||
|
|
||||||
def getAPIsList():
|
|
||||||
apisList = set()
|
|
||||||
for api, value in _INFO.items():
|
|
||||||
apisList.add(value.get('mappedAPI', api))
|
|
||||||
return apisList
|
|
||||||
|
|
||||||
def getClientScopesSet(api):
|
|
||||||
return {scope['scope'] for scope in _CLIENT_SCOPES if scope['api'] == api}
|
|
||||||
|
|
||||||
def getClientScopesList(commanddataClientAccess, todriveClientAccess):
|
|
||||||
caScopes = _CLIENT_SCOPES[:]
|
|
||||||
if commanddataClientAccess:
|
|
||||||
caScopes.extend(_COMMANDDATA_CLIENT_SCOPES)
|
|
||||||
if todriveClientAccess:
|
|
||||||
caScopes.extend(_TODRIVE_CLIENT_SCOPES)
|
|
||||||
return sorted(caScopes, key=lambda k: k['name'])
|
|
||||||
|
|
||||||
def getClientScopesURLs(commanddataClientAccess, todriveClientAccess):
|
|
||||||
caScopes = _CLIENT_SCOPES[:]
|
|
||||||
if commanddataClientAccess:
|
|
||||||
caScopes.extend(_COMMANDDATA_CLIENT_SCOPES)
|
|
||||||
if todriveClientAccess:
|
|
||||||
caScopes.extend(_TODRIVE_CLIENT_SCOPES)
|
|
||||||
return sorted({scope['scope'] for scope in _CLIENT_SCOPES})
|
|
||||||
|
|
||||||
def getSvcAcctScopeAPI(uscope):
|
|
||||||
for scope in _SVCACCT_SCOPES:
|
|
||||||
if uscope == scope['scope'] or (uscope.endswith('.readonly') and 'readonly' in scope.get('subscopes', [])):
|
|
||||||
return scope['api']
|
|
||||||
return None
|
|
||||||
|
|
||||||
def getSvcAcctScopes(userServiceAccountAccessOnly, svcAcctSpecialScopes):
|
|
||||||
saScopes = [scope['scope'] for scope in _SVCACCT_SCOPES]
|
|
||||||
if userServiceAccountAccessOnly:
|
|
||||||
saScopes.extend([scope['scope'] for scope in _USER_SVCACCT_ONLY_SCOPES])
|
|
||||||
if svcAcctSpecialScopes:
|
|
||||||
saScopes.extend([scope['scope'] for scope in _SVCACCT_SPECIAL_SCOPES])
|
|
||||||
return saScopes
|
|
||||||
|
|
||||||
def getSvcAcctScopesList(userServiceAccountAccessOnly, svcAcctSpecialScopes):
|
|
||||||
saScopes = _SVCACCT_SCOPES[:]
|
|
||||||
if userServiceAccountAccessOnly:
|
|
||||||
saScopes.extend(_USER_SVCACCT_ONLY_SCOPES)
|
|
||||||
if svcAcctSpecialScopes:
|
|
||||||
saScopes.extend(_SVCACCT_SPECIAL_SCOPES)
|
|
||||||
return sorted(saScopes, key=lambda k: k['name'])
|
|
||||||
|
|
||||||
def hasLocalJSON(api):
|
|
||||||
return _INFO[api].get('localjson', False)
|
|
||||||
|
|
||||||
def findAPIforScope(scopesList):
|
|
||||||
def checkScopeMatch(scope, cscope):
|
|
||||||
if cscope['scope'] == scope:
|
|
||||||
requiredAPIs.append(cscope['name'])
|
|
||||||
return True
|
|
||||||
if 'readonly' in cscope.get('subscopes', []) and cscope['scope']+'.readonly' == scope:
|
|
||||||
requiredAPIs.append(cscope['name']+' (supports readonly)')
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
requiredAPIs = []
|
|
||||||
for scope in scopesList:
|
|
||||||
for cscope in _CLIENT_SCOPES:
|
|
||||||
if checkScopeMatch(scope, cscope):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
for cscope in _SVCACCT_SCOPES:
|
|
||||||
if checkScopeMatch(scope, cscope):
|
|
||||||
break
|
|
||||||
if not requiredAPIs:
|
|
||||||
requiredAPIs = scopesList
|
|
||||||
return ' or '.join(requiredAPIs)
|
|
||||||
@@ -1,653 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM gam.cfg variables
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
TRUE = 'true'
|
|
||||||
FALSE = 'false'
|
|
||||||
DEFAULT_CHARSET = 'utf-8'
|
|
||||||
MY_CUSTOMER = 'my_customer'
|
|
||||||
NEVER = 'Never'
|
|
||||||
TLS_CHOICE_MAP = {
|
|
||||||
'': '',
|
|
||||||
'tlsv1_2': 'TLSv1_2', 'tlsv1.2': 'TLSv1_2',
|
|
||||||
'tlsv1_3': 'TLSv1_3', 'tlsv1.3': 'TLSv1_3',
|
|
||||||
}
|
|
||||||
|
|
||||||
FN_CACERTS_PEM = 'cacerts.pem'
|
|
||||||
FN_CLIENT_SECRETS_JSON = 'client_secrets.json'
|
|
||||||
FN_EXTRA_ARGS_TXT = 'extra-args.txt'
|
|
||||||
FN_OAUTH2_TXT = 'oauth2.txt'
|
|
||||||
FN_OAUTH2SERVICE_JSON = 'oauth2service.json'
|
|
||||||
|
|
||||||
# Global variables defined in gam.cfg
|
|
||||||
|
|
||||||
# The following XXX constants are the names of the items in gam.cfg
|
|
||||||
# When retrieving lists of Google Drive activities from API, how many should be retrieved in each chunk
|
|
||||||
ACTIVITY_MAX_RESULTS = 'activity_max_results'
|
|
||||||
# Admin email address, required when enable_dasa is true, overrides oauth2.txt value otherwise
|
|
||||||
ADMIN_EMAIL = 'admin_email'
|
|
||||||
# Check if API calls rate exceeds limit
|
|
||||||
API_CALLS_RATE_CHECK = 'api_calls_rate_check'
|
|
||||||
# API calls per 100 seconds limit
|
|
||||||
API_CALLS_RATE_LIMIT = 'api_calls_rate_limit'
|
|
||||||
# API calls tries limit
|
|
||||||
API_CALLS_TRIES_LIMIT = 'api_calls_tries_limit'
|
|
||||||
# Automatically generate gam batch command if number of users specified in gam users xxx command exceeds this number
|
|
||||||
# Default: 0, do not automatically generate gam batch commands
|
|
||||||
AUTO_BATCH_MIN = 'auto_batch_min'
|
|
||||||
# When bailing on internal errors, how many total tries should be performed
|
|
||||||
BAIL_ON_INTERNAL_ERROR_TRIES = 'bail_on_internal_error_tries'
|
|
||||||
# When processing items in batches, how many should be processed in each batch
|
|
||||||
BATCH_SIZE = 'batch_size'
|
|
||||||
# Location of cacerts.pem for API calls
|
|
||||||
CACERTS_PEM = 'cacerts_pem'
|
|
||||||
# GAM cache directory
|
|
||||||
CACHE_DIR = 'cache_dir'
|
|
||||||
# GAM cache discovery only. If no_cache is False, only API discovery calls will be cached
|
|
||||||
CACHE_DISCOVERY_ONLY = 'cache_discovery_only'
|
|
||||||
# Channel custmerId from gam.cfg
|
|
||||||
CHANNEL_CUSTOMER_ID = 'channel_customer_id'
|
|
||||||
# Character set of batch, csv, data files
|
|
||||||
CHARSET = 'charset'
|
|
||||||
# When retrieving lists of Chat items from API, how many should be retrieved in each chunk
|
|
||||||
CHAT_MAX_RESULTS = 'chat_max_results'
|
|
||||||
# When retrieving lists of Google Classroom items from API, how many should be retrieved in each chunk
|
|
||||||
CLASSROOM_MAX_RESULTS = 'classroom_max_results'
|
|
||||||
# Path to client_secrets.json
|
|
||||||
CLIENT_SECRETS_JSON = 'client_secrets_json'
|
|
||||||
# Allowed clock skew in seconds
|
|
||||||
CLOCK_SKEW_IN_SECONDS = 'clock_skew_in_seconds'
|
|
||||||
# Command logging filename
|
|
||||||
CMDLOG = 'cmdlog'
|
|
||||||
# Bogus Command logging maximum number of backup log files
|
|
||||||
CMDLOG_MAX__BACKUPS = 'cmdlog_max__backups'
|
|
||||||
# Command logging maximum number of backup log files
|
|
||||||
CMDLOG_MAX_BACKUPS = 'cmdlog_max_backups'
|
|
||||||
# Command logging max kilo bytes per log file
|
|
||||||
CMDLOG_MAX_KILO_BYTES = 'cmdlog_max_kilo_bytes'
|
|
||||||
# Use client access for command data from Google Docs/Sheets
|
|
||||||
COMMANDDATA_CLIENTACCESS = 'commanddata_clientaccess'
|
|
||||||
# GAM config directory containing client_secrets.json, oauth2.txt, oauth2service.json, extra_args.txt
|
|
||||||
CONFIG_DIR = 'config_dir'
|
|
||||||
# When retrieving lists of Google Contacts from API, how many should be retrieved in each chunk
|
|
||||||
CONTACT_MAX_RESULTS = 'contact_max_results'
|
|
||||||
# Column delimiter in CSV input file
|
|
||||||
CSV_INPUT_COLUMN_DELIMITER = 'csv_input_column_delimiter'
|
|
||||||
# No escape character in CSV input file
|
|
||||||
CSV_INPUT_NO_ESCAPE_CHAR = 'csv_input_no_escape_char'
|
|
||||||
# Quote character in CSV input file
|
|
||||||
CSV_INPUT_QUOTE_CHAR = 'csv_input_quote_char'
|
|
||||||
# Filter for input column values
|
|
||||||
CSV_INPUT_ROW_FILTER = 'csv_input_row_filter'
|
|
||||||
# Mode (and|or) for input column values
|
|
||||||
CSV_INPUT_ROW_FILTER_MODE = 'csv_input_row_filter_mode'
|
|
||||||
# Filter for input column drop values
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER = 'csv_input_row_drop_filter'
|
|
||||||
# Mode (and|or) for input column drop values
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER_MODE = 'csv_input_row_drop_filter_mode'
|
|
||||||
# Limit number of input rows
|
|
||||||
CSV_INPUT_ROW_LIMIT = 'csv_input_row_limit'
|
|
||||||
# Convert newlines in text fields to "\n" in CSV output file
|
|
||||||
CSV_OUTPUT_CONVERT_CR_NL = 'csv_output_convert_cr_nl'
|
|
||||||
# Column delimiter in CSV output file
|
|
||||||
CSV_OUTPUT_COLUMN_DELIMITER = 'csv_output_column_delimiter'
|
|
||||||
# No escape character in CSV output file
|
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR = 'csv_output_no_escape_char'
|
|
||||||
# Field list delimiter in CSV output file
|
|
||||||
CSV_OUTPUT_FIELD_DELIMITER = 'csv_output_field_delimiter'
|
|
||||||
# Filter for output column headers
|
|
||||||
CSV_OUTPUT_HEADER_FILTER = 'csv_output_header_filter'
|
|
||||||
# Filter for output column headers to drop
|
|
||||||
CSV_OUTPUT_HEADER_DROP_FILTER = 'csv_output_header_drop_filter'
|
|
||||||
# Force output column headers
|
|
||||||
CSV_OUTPUT_HEADER_FORCE = 'csv_output_header_force'
|
|
||||||
# Orde output column headers
|
|
||||||
CSV_OUTPUT_HEADER_ORDER = 'csv_output_header_order'
|
|
||||||
# Required output column headers
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED = 'csv_output_header_required'
|
|
||||||
# Line terminator in CSV output file
|
|
||||||
CSV_OUTPUT_LINE_TERMINATOR = 'csv_output_line_terminator'
|
|
||||||
# Quote character in CSV output file
|
|
||||||
CSV_OUTPUT_QUOTE_CHAR = 'csv_output_quote_char'
|
|
||||||
# Filter for output column values
|
|
||||||
CSV_OUTPUT_ROW_FILTER = 'csv_output_row_filter'
|
|
||||||
# Mode (and|or) for output column values
|
|
||||||
CSV_OUTPUT_ROW_FILTER_MODE = 'csv_output_row_filter_mode'
|
|
||||||
# Filter for output column drop values
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER = 'csv_output_row_drop_filter'
|
|
||||||
# Mode (and|or) for output column drop values
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER_MODE = 'csv_output_row_drop_filter_mode'
|
|
||||||
# Limit number of output rows
|
|
||||||
CSV_OUTPUT_ROW_LIMIT = 'csv_output_row_limit'
|
|
||||||
# Output sort headers
|
|
||||||
CSV_OUTPUT_SORT_HEADERS = 'csv_output_sort_headers'
|
|
||||||
# Column header subfield name delimiter in CSV output file
|
|
||||||
CSV_OUTPUT_SUBFIELD_DELIMITER = 'csv_output_subfield_delimiter'
|
|
||||||
# Add timestamp column to CSV output file
|
|
||||||
CSV_OUTPUT_TIMESTAMP_COLUMN = 'csv_output_timestamp_column'
|
|
||||||
# Output rows for users even if they do not have the print object (delegate, filters, ...)
|
|
||||||
CSV_OUTPUT_USERS_AUDIT = 'csv_output_users_audit'
|
|
||||||
# custmerId from gam.cfg or retrieved from Google
|
|
||||||
CUSTOMER_ID = 'customer_id'
|
|
||||||
# If debug_level > 0: extra_args['prettyPrint'] = True, httplib2.debuglevel = gam_debug_level, appsObj.debug = True
|
|
||||||
DEBUG_LEVEL = 'debug_level'
|
|
||||||
# redact sensitive credentials from debug output
|
|
||||||
DEBUG_REDACTION = 'debug_redaction'
|
|
||||||
# Developer Preview APIs
|
|
||||||
DEVELOPER_PREVIEW_APIS = 'developer_preview_apis'
|
|
||||||
# Developer Preview API Key
|
|
||||||
DEVELOPER_PREVIEW_API_KEY = 'developer_preview_api_key'
|
|
||||||
# When retrieving lists of ChromeOS devices from API, how many should be retrieved in each chunk
|
|
||||||
DEVICE_MAX_RESULTS = 'device_max_results'
|
|
||||||
# Domain obtained from gam.cfg or oauth2.txt
|
|
||||||
DOMAIN = 'domain'
|
|
||||||
# directory for file output
|
|
||||||
DRIVE_DIR = 'drive_dir'
|
|
||||||
# When retrieving lists of Drive files/folders from API, how many should be retrieved in each chunk
|
|
||||||
DRIVE_MAX_RESULTS = 'drive_max_results'
|
|
||||||
# When processing email messages in batches, how many should be processed in each batch
|
|
||||||
EMAIL_BATCH_SIZE = 'email_batch_size'
|
|
||||||
# Enable Delegated Admin Service Account
|
|
||||||
ENABLE_DASA = 'enable_dasa'
|
|
||||||
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
|
||||||
ENABLE_GCLOUD_REAUTH = 'enable_gcloud_reauth'
|
|
||||||
# When retrieving lists of calendar events from API, how many should be retrieved in each chunk
|
|
||||||
EVENT_MAX_RESULTS = 'event_max_results'
|
|
||||||
# Path to extra_args.txt
|
|
||||||
EXTRA_ARGS = 'extra_args'
|
|
||||||
# Google Cloud Project Organization ID
|
|
||||||
GCP_ORG_ID = 'gcp_org_id'
|
|
||||||
# Gmail CSE certificates directory
|
|
||||||
GMAIL_CSE_INCERT_DIR = 'gmail_cse_incert_dir'
|
|
||||||
# Gmail CSE KACL wrapped key files
|
|
||||||
GMAIL_CSE_INKEY_DIR = 'gmail_cse_inkey_dir'
|
|
||||||
# directory for file input
|
|
||||||
INPUT_DIR = 'input_dir'
|
|
||||||
# When processing items in batches, how many seconds should GAM wait between batches
|
|
||||||
INTER_BATCH_WAIT = 'inter_batch_wait'
|
|
||||||
# When retrieving lists of licenses from API, how many should be retrieved in each chunk
|
|
||||||
LICENSE_MAX_RESULTS = 'license_max_results'
|
|
||||||
# License SKUs to process
|
|
||||||
LICENSE_SKUS = 'license_skus'
|
|
||||||
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
|
||||||
MEMBER_MAX_RESULTS = 'member_max_results'
|
|
||||||
# CI API Group members max page size when view=BASIC
|
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC = 'member_max_results_ci_basic'
|
|
||||||
# CI API Group members max page size when view=FULL
|
|
||||||
MEMBER_MAX_RESULTS_CI_FULL = 'member_max_results_ci_full'
|
|
||||||
# When deleting or modifying Gmail messages, how many should be processed in each batch
|
|
||||||
MESSAGE_BATCH_SIZE = 'message_batch_size'
|
|
||||||
# When retrieving lists of Gmail messages from API, how many should be retrieved in each chunk
|
|
||||||
MESSAGE_MAX_RESULTS = 'message_max_results'
|
|
||||||
# When retrieving lists of Mobile devices from API, how many should be retrieved in each chunk
|
|
||||||
MOBILE_MAX_RESULTS = 'mobile_max_results'
|
|
||||||
# Number of parallel multiprocess pool.apply_async calls; -1: no limit, 0: NUM_THREADS, >0: specific limit
|
|
||||||
MULTIPROCESS_POOL_LIMIT = 'multiprocess_pool_limit'
|
|
||||||
# Value to substitute for NEVER_TIME
|
|
||||||
NEVER_TIME = 'never_time'
|
|
||||||
# If no_browser is False, writeCSVfile won't open a browser when todrive is set
|
|
||||||
# and doOAuthRequest prints a link and waits for the verification code when oauth2.txt is being created
|
|
||||||
NO_BROWSER = 'no_browser'
|
|
||||||
# Disable GAM API caching
|
|
||||||
NO_CACHE = 'no_cache'
|
|
||||||
# Do noit use URL shortner for authentication URLs
|
|
||||||
NO_SHORT_URLS = 'no_short_urls'
|
|
||||||
# Disable GAM update check
|
|
||||||
NO_UPDATE_CHECK = 'no_update_check'
|
|
||||||
# Disable SSL certificate validation
|
|
||||||
NO_VERIFY_SSL = 'no_verify_ssl'
|
|
||||||
# Number of threads for gam tbatch
|
|
||||||
NUM_TBATCH_THREADS = 'num_tbatch_threads'
|
|
||||||
# Number of threads for gam batch/csv
|
|
||||||
NUM_THREADS = 'num_threads'
|
|
||||||
# Path to oauth2.txt
|
|
||||||
OAUTH2_TXT = 'oauth2_txt'
|
|
||||||
# File permissions for oauth2.txt.lock
|
|
||||||
OAUTH2_TXT_LOCK_MODE = 'oauth2_txt_lock_mode'
|
|
||||||
# Path to oauth2service.json
|
|
||||||
OAUTH2SERVICE_JSON = 'oauth2service_json'
|
|
||||||
# Output date format, empty defalts to ISOFormat
|
|
||||||
OUTPUT_DATEFORMAT = 'output_dateformat'
|
|
||||||
# Output time format, empty defalts to ISOFormat
|
|
||||||
OUTPUT_TIMEFORMAT = 'output_timeformat'
|
|
||||||
# When retrieving lists of people from API, how many should be retrieved in each chunk
|
|
||||||
PEOPLE_MAX_RESULTS = 'people_max_results'
|
|
||||||
# Domains for print alises|groups|users
|
|
||||||
PRINT_AGU_DOMAINS = 'print_agu_domains'
|
|
||||||
# OrgUnits for print cros
|
|
||||||
PRINT_CROS_OUS = 'print_cros_ous'
|
|
||||||
# OrgUnits and children for print cros
|
|
||||||
PRINT_CROS_OUS_AND_CHILDREN = 'print_cros_ous_and_children'
|
|
||||||
# Number of seconds to wait for batch/csv processes to complete
|
|
||||||
PROCESS_WAIT_LIMIT = 'process_wait_limit'
|
|
||||||
# Use quick method to move Chromebooks to OU
|
|
||||||
QUICK_CROS_MOVE = 'quick_cros_move'
|
|
||||||
# Quick info user: nogroups nolicenses noschemas
|
|
||||||
QUICK_INFO_USER = 'quick_info_user'
|
|
||||||
# resellerId from gam.cfg or retrieved from Google
|
|
||||||
RESELLER_ID = 'reseller_id'
|
|
||||||
# Retry service not available errors on API calls
|
|
||||||
RETRY_API_SERVICE_NOT_AVAILABLE = 'retry_api_service_not_available'
|
|
||||||
# Default section to use for processing
|
|
||||||
SECTION = 'section'
|
|
||||||
# Show API calls retry data
|
|
||||||
SHOW_API_CALLS_RETRY_DATA = 'show_api_calls_retry_data'
|
|
||||||
# Show commands when processing batch/csv/loop
|
|
||||||
SHOW_COMMANDS = 'show_commands'
|
|
||||||
# Convert newlines in text fields to "\n" in show commands
|
|
||||||
SHOW_CONVERT_CR_NL = 'show_convert_cr_nl'
|
|
||||||
# Add (n/m) to end of messages if number of items to be processed exceeds this number
|
|
||||||
SHOW_COUNTS_MIN = 'show_counts_min'
|
|
||||||
# Enable/disable "Getting ... " messages
|
|
||||||
SHOW_GETTINGS = 'show_gettings'
|
|
||||||
# Enable/disable NL at end of "Got ..." messages
|
|
||||||
SHOW_GETTINGS_GOT_NL = 'show_gettings_got_nl'
|
|
||||||
# Enable/disable showing multiprocess info in redirected stdout/stderr
|
|
||||||
SHOW_MULTIPROCESS_INFO = 'show_multiprocess_info'
|
|
||||||
# SMTP fqdn
|
|
||||||
SMTP_FQDN = 'smtp_fqdn'
|
|
||||||
# SMTP host
|
|
||||||
SMTP_HOST = 'smtp_host'
|
|
||||||
# SMTP username
|
|
||||||
SMTP_USERNAME = 'smtp_username'
|
|
||||||
# SMTP password
|
|
||||||
SMTP_PASSWORD = 'smtp_password'
|
|
||||||
# Time Zone
|
|
||||||
TIMEZONE = 'timezone'
|
|
||||||
## Minimum TLS Version required for HTTPS connections
|
|
||||||
TLS_MIN_VERSION = 'tls_min_version'
|
|
||||||
## Maximum TLS Version used for HTTPS connections
|
|
||||||
TLS_MAX_VERSION = 'tls_max_version'
|
|
||||||
# Clear basic filter when updating an existing sheet
|
|
||||||
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
|
||||||
# Use client access for todrive
|
|
||||||
TODRIVE_CLIENTACCESS = 'todrive_clientaccess'
|
|
||||||
# Enable conversion to Google Sheets when uploading todrive files
|
|
||||||
TODRIVE_CONVERSION = 'todrive_conversion'
|
|
||||||
# Save local copy of CSV file
|
|
||||||
TODRIVE_LOCALCOPY = 'todrive_localcopy'
|
|
||||||
# Specify locale for Google Sheets
|
|
||||||
TODRIVE_LOCALE = 'todrive_locale'
|
|
||||||
# Suppress opening browser on todrive upload
|
|
||||||
TODRIVE_NOBROWSER = 'todrive_nobrowser'
|
|
||||||
# Suppress sending email on todrive upload
|
|
||||||
TODRIVE_NOEMAIL = 'todrive_noemail'
|
|
||||||
# No escape character in CSV output file
|
|
||||||
TODRIVE_NO_ESCAPE_CHAR = 'todrive_no_escape_char'
|
|
||||||
# ID/Name of parent folder for todrive files
|
|
||||||
TODRIVE_PARENT = 'todrive_parent'
|
|
||||||
# Append timestamp to todrive sheet name
|
|
||||||
TODRIVE_SHEET_TIMESTAMP = 'todrive_sheet_timestamp'
|
|
||||||
# Sheet timestamp format, empty defalts to ISOFormat
|
|
||||||
TODRIVE_SHEET_TIMEFORMAT = 'todrive_sheet_timeformat'
|
|
||||||
# Append timestamp to todrive file name
|
|
||||||
TODRIVE_TIMESTAMP = 'todrive_timestamp'
|
|
||||||
# Timestamp format, empty defalts to ISOFormat
|
|
||||||
TODRIVE_TIMEFORMAT = 'todrive_timeformat'
|
|
||||||
# Specify timezone for Google Sheets
|
|
||||||
TODRIVE_TIMEZONE = 'todrive_timezone'
|
|
||||||
# Upload data files with no data
|
|
||||||
TODRIVE_UPLOAD_NODATA = 'todrive_upload_nodata'
|
|
||||||
# User for todrive files
|
|
||||||
TODRIVE_USER = 'todrive_user'
|
|
||||||
# Truncate Client ID
|
|
||||||
TRUNCATE_CLIENT_ID = 'truncate_client_id'
|
|
||||||
# Update CrOS org unit with orgUnitId
|
|
||||||
UPDATE_CROS_OU_WITH_ID = 'update_cros_ou_with_id'
|
|
||||||
# Use admin access for chat where possible
|
|
||||||
USE_CHAT_ADMIN_ACCESS = 'use_chat_admin_access'
|
|
||||||
# Use course owner for course access
|
|
||||||
USE_COURSE_OWNER_ACCESS = 'use_course_owner_access'
|
|
||||||
# Use Project ID as Project Name and App Name
|
|
||||||
USE_PROJECTID_AS_NAME = 'use_projectid_as_name'
|
|
||||||
# When retrieving lists of Users from API, how many should be retrieved in each chunk
|
|
||||||
USER_MAX_RESULTS = 'user_max_results'
|
|
||||||
# User service account access only, no client access
|
|
||||||
USER_SERVICE_ACCOUNT_ACCESS_ONLY = 'user_service_account_access_only'
|
|
||||||
|
|
||||||
CSV_INPUT_ROW_FILTER_ITEMS = {CSV_INPUT_ROW_FILTER, CSV_INPUT_ROW_FILTER_MODE,
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER, CSV_INPUT_ROW_DROP_FILTER_MODE,
|
|
||||||
CSV_INPUT_ROW_LIMIT}
|
|
||||||
|
|
||||||
CSV_OUTPUT_ROW_FILTER_ITEMS = {CSV_OUTPUT_HEADER_FILTER, CSV_OUTPUT_HEADER_DROP_FILTER,
|
|
||||||
CSV_OUTPUT_HEADER_FORCE, CSV_OUTPUT_HEADER_ORDER,
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED,
|
|
||||||
CSV_OUTPUT_ROW_FILTER, CSV_OUTPUT_ROW_FILTER_MODE,
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER, CSV_OUTPUT_ROW_DROP_FILTER_MODE,
|
|
||||||
CSV_OUTPUT_ROW_LIMIT}
|
|
||||||
|
|
||||||
Defaults = {
|
|
||||||
ACTIVITY_MAX_RESULTS: '100',
|
|
||||||
ADMIN_EMAIL: '',
|
|
||||||
API_CALLS_RATE_CHECK: FALSE,
|
|
||||||
API_CALLS_RATE_LIMIT: '100',
|
|
||||||
API_CALLS_TRIES_LIMIT: '10',
|
|
||||||
AUTO_BATCH_MIN: '0',
|
|
||||||
BAIL_ON_INTERNAL_ERROR_TRIES: '2',
|
|
||||||
BATCH_SIZE: '50',
|
|
||||||
CACERTS_PEM: '',
|
|
||||||
CACHE_DIR: '',
|
|
||||||
CACHE_DISCOVERY_ONLY: TRUE,
|
|
||||||
CHARSET: DEFAULT_CHARSET,
|
|
||||||
CHANNEL_CUSTOMER_ID: '',
|
|
||||||
CHAT_MAX_RESULTS: '100',
|
|
||||||
CLASSROOM_MAX_RESULTS: '0',
|
|
||||||
CLIENT_SECRETS_JSON: FN_CLIENT_SECRETS_JSON,
|
|
||||||
CLOCK_SKEW_IN_SECONDS: '10',
|
|
||||||
CMDLOG: '',
|
|
||||||
CMDLOG_MAX_BACKUPS: 5,
|
|
||||||
CMDLOG_MAX_KILO_BYTES: 1000,
|
|
||||||
COMMANDDATA_CLIENTACCESS: FALSE,
|
|
||||||
CONFIG_DIR: '',
|
|
||||||
CONTACT_MAX_RESULTS: '100',
|
|
||||||
CSV_INPUT_COLUMN_DELIMITER: ',',
|
|
||||||
CSV_INPUT_NO_ESCAPE_CHAR: TRUE,
|
|
||||||
CSV_INPUT_QUOTE_CHAR: '\'"\'',
|
|
||||||
CSV_INPUT_ROW_FILTER: '',
|
|
||||||
CSV_INPUT_ROW_FILTER_MODE: 'allmatch',
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER: '',
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER_MODE: 'anymatch',
|
|
||||||
CSV_INPUT_ROW_LIMIT: '0',
|
|
||||||
CSV_OUTPUT_COLUMN_DELIMITER: ',',
|
|
||||||
CSV_OUTPUT_CONVERT_CR_NL: FALSE,
|
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR: FALSE,
|
|
||||||
CSV_OUTPUT_FIELD_DELIMITER: "' '",
|
|
||||||
CSV_OUTPUT_HEADER_FILTER: '',
|
|
||||||
CSV_OUTPUT_HEADER_DROP_FILTER: '',
|
|
||||||
CSV_OUTPUT_HEADER_FORCE: '',
|
|
||||||
CSV_OUTPUT_HEADER_ORDER: '',
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: '',
|
|
||||||
CSV_OUTPUT_LINE_TERMINATOR: 'lf',
|
|
||||||
CSV_OUTPUT_QUOTE_CHAR: '\'"\'',
|
|
||||||
CSV_OUTPUT_ROW_FILTER: '',
|
|
||||||
CSV_OUTPUT_ROW_FILTER_MODE: 'allmatch',
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER: '',
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER_MODE: 'anymatch',
|
|
||||||
CSV_OUTPUT_ROW_LIMIT: '0',
|
|
||||||
CSV_OUTPUT_SORT_HEADERS: '',
|
|
||||||
CSV_OUTPUT_SUBFIELD_DELIMITER: '.',
|
|
||||||
CSV_OUTPUT_TIMESTAMP_COLUMN: '',
|
|
||||||
CSV_OUTPUT_USERS_AUDIT: FALSE,
|
|
||||||
CUSTOMER_ID: MY_CUSTOMER,
|
|
||||||
DEBUG_LEVEL: '0',
|
|
||||||
DEBUG_REDACTION: TRUE,
|
|
||||||
DEVELOPER_PREVIEW_APIS: '',
|
|
||||||
DEVELOPER_PREVIEW_API_KEY: '',
|
|
||||||
DEVICE_MAX_RESULTS: '200',
|
|
||||||
DOMAIN: '',
|
|
||||||
DRIVE_DIR: '',
|
|
||||||
DRIVE_MAX_RESULTS: '1000',
|
|
||||||
EMAIL_BATCH_SIZE: '50',
|
|
||||||
ENABLE_DASA: FALSE,
|
|
||||||
ENABLE_GCLOUD_REAUTH: FALSE,
|
|
||||||
EVENT_MAX_RESULTS: '250',
|
|
||||||
EXTRA_ARGS: '',
|
|
||||||
GCP_ORG_ID: '',
|
|
||||||
GMAIL_CSE_INCERT_DIR: '',
|
|
||||||
GMAIL_CSE_INKEY_DIR: '',
|
|
||||||
INPUT_DIR: '.',
|
|
||||||
INTER_BATCH_WAIT: '0',
|
|
||||||
LICENSE_MAX_RESULTS: '100',
|
|
||||||
LICENSE_SKUS: '',
|
|
||||||
MEMBER_MAX_RESULTS: '200',
|
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC: '1000',
|
|
||||||
MEMBER_MAX_RESULTS_CI_FULL: '500',
|
|
||||||
MESSAGE_BATCH_SIZE: '50',
|
|
||||||
MESSAGE_MAX_RESULTS: '500',
|
|
||||||
MOBILE_MAX_RESULTS: '100',
|
|
||||||
MULTIPROCESS_POOL_LIMIT: '0',
|
|
||||||
NEVER_TIME: NEVER,
|
|
||||||
NO_BROWSER: FALSE,
|
|
||||||
NO_CACHE: FALSE,
|
|
||||||
NO_SHORT_URLS: TRUE,
|
|
||||||
NO_UPDATE_CHECK: TRUE,
|
|
||||||
NO_VERIFY_SSL: FALSE,
|
|
||||||
NUM_TBATCH_THREADS: '2',
|
|
||||||
NUM_THREADS: '5',
|
|
||||||
OAUTH2_TXT: FN_OAUTH2_TXT,
|
|
||||||
OAUTH2_TXT_LOCK_MODE: '644',
|
|
||||||
OAUTH2SERVICE_JSON: FN_OAUTH2SERVICE_JSON,
|
|
||||||
OUTPUT_DATEFORMAT: '',
|
|
||||||
OUTPUT_TIMEFORMAT: '',
|
|
||||||
PEOPLE_MAX_RESULTS: '100',
|
|
||||||
PRINT_AGU_DOMAINS: '',
|
|
||||||
PRINT_CROS_OUS: '',
|
|
||||||
PRINT_CROS_OUS_AND_CHILDREN: '',
|
|
||||||
PROCESS_WAIT_LIMIT: '0',
|
|
||||||
QUICK_CROS_MOVE: FALSE,
|
|
||||||
QUICK_INFO_USER: FALSE,
|
|
||||||
RESELLER_ID: '',
|
|
||||||
RETRY_API_SERVICE_NOT_AVAILABLE: FALSE,
|
|
||||||
SECTION: '',
|
|
||||||
SHOW_API_CALLS_RETRY_DATA: FALSE,
|
|
||||||
SHOW_COMMANDS: FALSE,
|
|
||||||
SHOW_CONVERT_CR_NL: FALSE,
|
|
||||||
SHOW_COUNTS_MIN: '1',
|
|
||||||
SHOW_GETTINGS: TRUE,
|
|
||||||
SHOW_GETTINGS_GOT_NL: FALSE,
|
|
||||||
SHOW_MULTIPROCESS_INFO: FALSE,
|
|
||||||
SMTP_FQDN: '',
|
|
||||||
SMTP_HOST: '',
|
|
||||||
SMTP_USERNAME: '',
|
|
||||||
SMTP_PASSWORD: '',
|
|
||||||
TIMEZONE: 'utc',
|
|
||||||
TLS_MIN_VERSION: 'TLSv1_3',
|
|
||||||
TLS_MAX_VERSION: '',
|
|
||||||
TODRIVE_CLEARFILTER: FALSE,
|
|
||||||
TODRIVE_CLIENTACCESS: FALSE,
|
|
||||||
TODRIVE_CONVERSION: TRUE,
|
|
||||||
TODRIVE_LOCALCOPY: FALSE,
|
|
||||||
TODRIVE_LOCALE: '',
|
|
||||||
TODRIVE_NOBROWSER: '',
|
|
||||||
TODRIVE_NOEMAIL: '',
|
|
||||||
TODRIVE_NO_ESCAPE_CHAR: TRUE,
|
|
||||||
TODRIVE_PARENT: 'root',
|
|
||||||
TODRIVE_SHEET_TIMESTAMP: 'copy', # copy from TODRIVE_TIMESTAMP
|
|
||||||
TODRIVE_SHEET_TIMEFORMAT: 'copy', # copy from TODRIVE_TIMEFORMAT
|
|
||||||
TODRIVE_TIMESTAMP: FALSE,
|
|
||||||
TODRIVE_TIMEFORMAT: '',
|
|
||||||
TODRIVE_TIMEZONE: '',
|
|
||||||
TODRIVE_UPLOAD_NODATA: TRUE,
|
|
||||||
TODRIVE_USER: '',
|
|
||||||
TRUNCATE_CLIENT_ID: FALSE,
|
|
||||||
UPDATE_CROS_OU_WITH_ID: FALSE,
|
|
||||||
USE_CHAT_ADMIN_ACCESS: FALSE,
|
|
||||||
USE_COURSE_OWNER_ACCESS: FALSE,
|
|
||||||
USE_PROJECTID_AS_NAME: FALSE,
|
|
||||||
USER_MAX_RESULTS: '500',
|
|
||||||
USER_SERVICE_ACCOUNT_ACCESS_ONLY: FALSE,
|
|
||||||
}
|
|
||||||
|
|
||||||
Values = {DEBUG_LEVEL: 0}
|
|
||||||
|
|
||||||
TYPE_BOOLEAN = 'bool'
|
|
||||||
TYPE_CHARACTER = 'char'
|
|
||||||
TYPE_CHOICE = 'choi'
|
|
||||||
TYPE_CHOICE_LIST = 'chol'
|
|
||||||
TYPE_DATETIME = 'datm'
|
|
||||||
TYPE_DIRECTORY = 'dire'
|
|
||||||
TYPE_EMAIL = 'emai'
|
|
||||||
TYPE_EMAIL_OPTIONAL = 'emao'
|
|
||||||
TYPE_FILE = 'file'
|
|
||||||
TYPE_FLOAT = 'floa'
|
|
||||||
TYPE_HEADERFILTER = 'heaf'
|
|
||||||
TYPE_HEADERFORCEREQUIRED = 'hefr'
|
|
||||||
TYPE_HEADERORDER = 'heor'
|
|
||||||
TYPE_INTEGER = 'inte'
|
|
||||||
TYPE_LANGUAGE = 'lang'
|
|
||||||
TYPE_LOCALE = 'locl'
|
|
||||||
TYPE_PASSWORD = 'pass'
|
|
||||||
TYPE_ROWFILTER = 'rowf'
|
|
||||||
TYPE_STRING = 'stri'
|
|
||||||
TYPE_STRINGLIST = 'strl'
|
|
||||||
TYPE_TIMEZONE = 'tmzn'
|
|
||||||
|
|
||||||
VAR_TYPE = 'type'
|
|
||||||
VAR_ENVVAR = 'enva'
|
|
||||||
VAR_CHOICES = 'chod'
|
|
||||||
VAR_LIMITS = 'lmit'
|
|
||||||
VAR_SFFT = 'sfft'
|
|
||||||
VAR_SIGFILE = 'sigf'
|
|
||||||
VAR_ACCESS = 'aces'
|
|
||||||
|
|
||||||
VAR_INFO = {
|
|
||||||
ACTIVITY_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
|
||||||
ADMIN_EMAIL: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_ADMIN_EMAIL', VAR_LIMITS: (0, None)},
|
|
||||||
API_CALLS_RATE_CHECK: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
API_CALLS_RATE_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (50, None)},
|
|
||||||
API_CALLS_TRIES_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (3, 30)},
|
|
||||||
AUTO_BATCH_MIN: {VAR_TYPE: TYPE_INTEGER, VAR_ENVVAR: 'GAM_AUTOBATCH', VAR_LIMITS: (0, 100)},
|
|
||||||
BAIL_ON_INTERNAL_ERROR_TRIES: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10)},
|
|
||||||
BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_ENVVAR: 'GAM_BATCH_SIZE', VAR_LIMITS: (1, 1000)},
|
|
||||||
CACERTS_PEM: {VAR_TYPE: TYPE_FILE, VAR_ENVVAR: 'GAM_CA_FILE', VAR_ACCESS: os.R_OK},
|
|
||||||
CACHE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMCACHEDIR'},
|
|
||||||
CACHE_DISCOVERY_ONLY: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'allcache.txt', VAR_SFFT: (TRUE, FALSE)},
|
|
||||||
CHARSET: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GAM_CHARSET', VAR_LIMITS: (1, None)},
|
|
||||||
CHANNEL_CUSTOMER_ID: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
CHAT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
||||||
CLASSROOM_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, 1000)},
|
|
||||||
CLIENT_SECRETS_JSON: {VAR_TYPE: TYPE_FILE, VAR_ENVVAR: 'CLIENTSECRETS', VAR_ACCESS: os.R_OK},
|
|
||||||
CLOCK_SKEW_IN_SECONDS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (10, 3600)},
|
|
||||||
CMDLOG: {VAR_TYPE: TYPE_FILE, VAR_ACCESS: os.W_OK},
|
|
||||||
CMDLOG_MAX_BACKUPS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10)},
|
|
||||||
CMDLOG_MAX_KILO_BYTES: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (100, 10000)},
|
|
||||||
COMMANDDATA_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
CONFIG_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMUSERCONFIGDIR'},
|
|
||||||
CONTACT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10000)},
|
|
||||||
CSV_INPUT_COLUMN_DELIMITER: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_INPUT_NO_ESCAPE_CHAR: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
CSV_INPUT_QUOTE_CHAR: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_INPUT_ROW_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
|
||||||
CSV_INPUT_ROW_FILTER_MODE: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'allmatch': True, 'anymatch': False}},
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER_MODE: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'allmatch': True, 'anymatch': False}},
|
|
||||||
CSV_INPUT_ROW_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, None)},
|
|
||||||
CSV_OUTPUT_COLUMN_DELIMITER: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_OUTPUT_CONVERT_CR_NL: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
CSV_OUTPUT_FIELD_DELIMITER: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_OUTPUT_HEADER_FILTER: {VAR_TYPE: TYPE_HEADERFILTER},
|
|
||||||
CSV_OUTPUT_HEADER_DROP_FILTER: {VAR_TYPE: TYPE_HEADERFILTER},
|
|
||||||
CSV_OUTPUT_HEADER_FORCE: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
|
||||||
CSV_OUTPUT_HEADER_ORDER: {VAR_TYPE: TYPE_HEADERORDER},
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: {VAR_TYPE: TYPE_HEADERFORCEREQUIRED},
|
|
||||||
CSV_OUTPUT_LINE_TERMINATOR: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'cr': '\r', 'lf': '\n', 'crlf': '\r\n'}},
|
|
||||||
CSV_OUTPUT_QUOTE_CHAR: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_OUTPUT_ROW_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
|
||||||
CSV_OUTPUT_ROW_FILTER_MODE: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'allmatch': True, 'anymatch': False}},
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER: {VAR_TYPE: TYPE_ROWFILTER},
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER_MODE: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'allmatch': True, 'anymatch': False}},
|
|
||||||
CSV_OUTPUT_ROW_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, None)},
|
|
||||||
CSV_OUTPUT_SORT_HEADERS: {VAR_TYPE: TYPE_STRINGLIST},
|
|
||||||
CSV_OUTPUT_SUBFIELD_DELIMITER: {VAR_TYPE: TYPE_CHARACTER},
|
|
||||||
CSV_OUTPUT_TIMESTAMP_COLUMN: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
CSV_OUTPUT_USERS_AUDIT: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
CUSTOMER_ID: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'CUSTOMER_ID', VAR_LIMITS: (0, None)},
|
|
||||||
DEBUG_LEVEL: {VAR_TYPE: TYPE_INTEGER, VAR_SIGFILE: 'debug.gam', VAR_LIMITS: (0, None), VAR_SFFT: ('0', '4')},
|
|
||||||
DEBUG_REDACTION: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
DEVELOPER_PREVIEW_APIS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
DEVELOPER_PREVIEW_API_KEY: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
|
||||||
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
|
||||||
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
|
||||||
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
||||||
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
|
||||||
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
EVENT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 2500)},
|
|
||||||
EXTRA_ARGS: {VAR_TYPE: TYPE_FILE, VAR_SIGFILE: FN_EXTRA_ARGS_TXT, VAR_SFFT: ('', FN_EXTRA_ARGS_TXT), VAR_ACCESS: os.R_OK},
|
|
||||||
GCP_ORG_ID: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
GMAIL_CSE_INCERT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
|
||||||
GMAIL_CSE_INKEY_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
|
||||||
INPUT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
|
||||||
INTER_BATCH_WAIT: {VAR_TYPE: TYPE_FLOAT, VAR_LIMITS: (0.0, 60.0)},
|
|
||||||
LICENSE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (10, 1000)},
|
|
||||||
LICENSE_SKUS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
MEMBER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
||||||
MEMBER_MAX_RESULTS_CI_FULL: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
|
||||||
MESSAGE_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
||||||
MESSAGE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10000)},
|
|
||||||
MOBILE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
|
||||||
MULTIPROCESS_POOL_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (-1, None)},
|
|
||||||
NEVER_TIME: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
NO_BROWSER: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'nobrowser.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
NO_CACHE: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'nocache.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
NO_SHORT_URLS: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'noshorturls.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
NO_UPDATE_CHECK: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
NO_VERIFY_SSL: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
NUM_TBATCH_THREADS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
|
||||||
NUM_THREADS: {VAR_TYPE: TYPE_INTEGER, VAR_ENVVAR: 'GAM_THREADS', VAR_LIMITS: (1, 1000)},
|
|
||||||
OAUTH2_TXT: {VAR_TYPE: TYPE_FILE, VAR_ENVVAR: 'OAUTHFILE', VAR_ACCESS: os.R_OK | os.W_OK},
|
|
||||||
OAUTH2_TXT_LOCK_MODE: {VAR_TYPE: TYPE_CHOICE, VAR_CHOICES: {'644': 0o644, '664': 0o664, '666': 0o666}},
|
|
||||||
OAUTH2SERVICE_JSON: {VAR_TYPE: TYPE_FILE, VAR_ENVVAR: 'OAUTHSERVICEFILE', VAR_ACCESS: os.R_OK | os.W_OK},
|
|
||||||
OUTPUT_DATEFORMAT: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
OUTPUT_TIMEFORMAT: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
PEOPLE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, 1000)},
|
|
||||||
PRINT_AGU_DOMAINS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
PRINT_CROS_OUS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
PRINT_CROS_OUS_AND_CHILDREN: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
PROCESS_WAIT_LIMIT: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, None)},
|
|
||||||
QUICK_CROS_MOVE: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
QUICK_INFO_USER: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
RESELLER_ID: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
RETRY_API_SERVICE_NOT_AVAILABLE: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SECTION: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
SHOW_API_CALLS_RETRY_DATA: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SHOW_COMMANDS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SHOW_CONVERT_CR_NL: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SHOW_COUNTS_MIN: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (0, 100)},
|
|
||||||
SHOW_GETTINGS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SHOW_GETTINGS_GOT_NL: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SHOW_MULTIPROCESS_INFO: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
SMTP_FQDN: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
SMTP_USERNAME: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
SMTP_PASSWORD: {VAR_TYPE: TYPE_PASSWORD, VAR_LIMITS: (0, None)},
|
|
||||||
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
|
||||||
TLS_MIN_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MIN_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
||||||
TLS_MAX_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MAX_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
||||||
TODRIVE_CLEARFILTER: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_LOCALCOPY: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_LOCALE: {VAR_TYPE: TYPE_LOCALE},
|
|
||||||
TODRIVE_NOBROWSER: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'nobrowser.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
TODRIVE_NOEMAIL: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'notdemail.txt', VAR_SFFT: (FALSE, TRUE)},
|
|
||||||
TODRIVE_NO_ESCAPE_CHAR: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_PARENT: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
TODRIVE_SHEET_TIMESTAMP: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_SHEET_TIMEFORMAT: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
TODRIVE_TIMESTAMP: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_TIMEFORMAT: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
TODRIVE_TIMEZONE: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
TODRIVE_UPLOAD_NODATA: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
TODRIVE_USER: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
||||||
TRUNCATE_CLIENT_ID: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
UPDATE_CROS_OU_WITH_ID: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
USE_CHAT_ADMIN_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
USE_COURSE_OWNER_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
USE_PROJECTID_AS_NAME: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
USER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
|
||||||
USER_SERVICE_ACCOUNT_ACCESS_ONLY: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,900 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM entity processing
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
class GamEntity():
|
|
||||||
|
|
||||||
ROLE_MANAGER = 'MANAGER'
|
|
||||||
ROLE_MEMBER = 'MEMBER'
|
|
||||||
ROLE_OWNER = 'OWNER'
|
|
||||||
ROLE_LIST = [ROLE_MANAGER, ROLE_MEMBER, ROLE_OWNER]
|
|
||||||
ROLE_USER = 'USER'
|
|
||||||
ROLE_MANAGER_MEMBER = ','.join([ROLE_MANAGER, ROLE_MEMBER])
|
|
||||||
ROLE_MANAGER_OWNER = ','.join([ROLE_MANAGER, ROLE_OWNER])
|
|
||||||
ROLE_MEMBER_OWNER = ','.join([ROLE_MEMBER, ROLE_OWNER])
|
|
||||||
ROLE_MANAGER_MEMBER_OWNER = ','.join(ROLE_LIST)
|
|
||||||
ROLE_PUBLIC = 'PUBLIC'
|
|
||||||
ROLE_ALL = ROLE_MANAGER_MEMBER_OWNER
|
|
||||||
|
|
||||||
TYPE_CBCM_BROWSER = 'CBCM_BROWSER'
|
|
||||||
TYPE_CUSTOMER = 'CUSTOMER'
|
|
||||||
TYPE_EXTERNAL = 'EXTERNAL'
|
|
||||||
TYPE_OTHER = 'OTHER'
|
|
||||||
TYPE_GROUP = 'GROUP'
|
|
||||||
TYPE_SERVICE_ACCOUNT = 'SERVICE_ACCOUNT'
|
|
||||||
TYPE_USER = 'USER'
|
|
||||||
|
|
||||||
# Keys into NAMES; arbitrary values but must be unique
|
|
||||||
ACCESS_TOKEN = 'atok'
|
|
||||||
ACCOUNT = 'acct'
|
|
||||||
ACTION = 'actn'
|
|
||||||
ACTIVITY = 'actv'
|
|
||||||
ADMINISTRATOR = 'admi'
|
|
||||||
ADMIN_ROLE = 'adro'
|
|
||||||
ADMIN_ROLE_ASSIGNMENT = 'adra'
|
|
||||||
ALERT = 'alrt'
|
|
||||||
ALERT_ID = 'alri'
|
|
||||||
ALERT_FEEDBACK = 'alfb'
|
|
||||||
ALERT_FEEDBACK_ID = 'alfi'
|
|
||||||
ALERT_SETTINGS = 'alrs'
|
|
||||||
ALIAS = 'alia'
|
|
||||||
ALIAS_EMAIL = 'alie'
|
|
||||||
ALIAS_TARGET = 'alit'
|
|
||||||
ANALYTIC_ACCOUNT = 'anac'
|
|
||||||
ANALYTIC_ACCOUNT_SUMMARY = 'anas'
|
|
||||||
ANALYTIC_DATASTREAM = 'anad'
|
|
||||||
ANALYTIC_PROPERTY = 'anap'
|
|
||||||
API = 'api '
|
|
||||||
APP_ACCESS_SETTINGS = 'apps'
|
|
||||||
APP_ID = 'appi'
|
|
||||||
APP_NAME = 'appn'
|
|
||||||
APPLICATION_SPECIFIC_PASSWORD = 'aspa'
|
|
||||||
ARROWS_ENABLED = 'arro'
|
|
||||||
ATTACHMENT = 'atta'
|
|
||||||
ATTENDEE = 'atnd'
|
|
||||||
AUDIT_ACTIVITY_REQUEST = 'auda'
|
|
||||||
AUDIT_EXPORT_REQUEST = 'audx'
|
|
||||||
AUDIT_MONITOR_REQUEST = 'audm'
|
|
||||||
BACKUP_VERIFICATION_CODES = 'buvc'
|
|
||||||
BUILDING = 'bldg'
|
|
||||||
BUILDING_ID = 'bldi'
|
|
||||||
BUSINESS_PROFILE_ACCOUNT = 'bpac'
|
|
||||||
CAA_LEVEL = 'calv'
|
|
||||||
CALENDAR = 'cale'
|
|
||||||
CALENDAR_ACL = 'cacl'
|
|
||||||
CALENDAR_SETTINGS = 'cset'
|
|
||||||
CHANNEL_CUSTOMER = 'chcu'
|
|
||||||
CHANNEL_CUSTOMER_ENTITLEMENT = 'chce'
|
|
||||||
CHANNEL_OFFER = 'chof'
|
|
||||||
CHANNEL_PRODUCT = 'chpr'
|
|
||||||
CHANNEL_SKU = 'chsk'
|
|
||||||
CHAT_BOT = 'chbo'
|
|
||||||
CHAT_ADMIN = 'chad'
|
|
||||||
CHAT_EMOJI = 'chem'
|
|
||||||
CHAT_EVENT = 'chev'
|
|
||||||
CHAT_MANAGER_USER = 'chgu'
|
|
||||||
CHAT_MEMBER = 'chme'
|
|
||||||
CHAT_MEMBER_GROUP = 'chmg'
|
|
||||||
CHAT_MEMBER_USER = 'chmu'
|
|
||||||
CHAT_MESSAGE = 'chms'
|
|
||||||
CHAT_MESSAGE_ID = 'chmi'
|
|
||||||
CHAT_OWNER_USER = 'chou'
|
|
||||||
CHAT_SECTION = 'chse'
|
|
||||||
CHAT_SECTION_ITEM = 'chsi'
|
|
||||||
CHAT_SPACE = 'chsp'
|
|
||||||
CHAT_THREAD = 'chth'
|
|
||||||
CHILD_ORGANIZATIONAL_UNIT = 'corg'
|
|
||||||
CHROME_APP = 'capp'
|
|
||||||
CHROME_APP_DEVICE = 'capd'
|
|
||||||
CHROME_BROWSER = 'chbr'
|
|
||||||
CHROME_BROWSER_ENROLLMENT_TOKEN = 'cbet'
|
|
||||||
CHROME_CHANNEL = 'chan'
|
|
||||||
CHROME_DEVICE = 'chdv'
|
|
||||||
CHROME_DEVICE_COUNT = 'chdc'
|
|
||||||
CHROME_MODEL = 'chmo'
|
|
||||||
CHROME_NETWORK_ID = 'chni'
|
|
||||||
CHROME_NETWORK_NAME = 'chnn'
|
|
||||||
CHROME_PLATFORM = 'cpla'
|
|
||||||
CHROME_POLICY = 'cpol'
|
|
||||||
CHROME_POLICY_IMAGE = 'cpim'
|
|
||||||
CHROME_POLICY_SCHEMA = 'cpsc'
|
|
||||||
CHROME_PROFILE = 'cpro'
|
|
||||||
CHROME_PROFILE_COMMAND = 'cpcm'
|
|
||||||
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'
|
|
||||||
CLASSROOM_INVITATION_TEACHER = 'clit'
|
|
||||||
CLASSROOM_OAUTH2_TXT_FILE = 'coa'
|
|
||||||
CLASSROOM_USER_PROFILE = 'clup'
|
|
||||||
CLIENT_ID = 'clid'
|
|
||||||
CLIENT_SECRETS_JSON_FILE = 'csjf'
|
|
||||||
CLOUD_IDENTITY_GROUP = 'cidg'
|
|
||||||
CLOUD_STORAGE_BUCKET = 'clsb'
|
|
||||||
CLOUD_STORAGE_FILE = 'clsf'
|
|
||||||
COLLABORATOR = 'cola'
|
|
||||||
COMMAND_ID = 'cmdi'
|
|
||||||
COMPANY_DEVICE = 'codv'
|
|
||||||
CONFIG_FILE = 'conf'
|
|
||||||
CONTACT = 'cont'
|
|
||||||
CONTACT_DELEGATE = 'cond'
|
|
||||||
CONTACT_GROUP = 'cogr'
|
|
||||||
CONTACT_GROUP_NAME = 'cogn'
|
|
||||||
COPYFROM_COURSE = 'cfco'
|
|
||||||
COPYFROM_GROUP = 'cfgr'
|
|
||||||
COURSE = 'cour'
|
|
||||||
COURSE_ALIAS = 'coal'
|
|
||||||
COURSE_ANNOUNCEMENT = 'cann'
|
|
||||||
COURSE_ANNOUNCEMENT_ID = 'caid'
|
|
||||||
COURSE_ANNOUNCEMENT_STATE = 'cast'
|
|
||||||
COURSE_MATERIAL_DRIVEFILE = 'comd'
|
|
||||||
COURSE_MATERIAL_FORM = 'comf'
|
|
||||||
COURSE_MATERIAL = 'cmtl'
|
|
||||||
COURSE_MATERIAL_ID = 'cmid'
|
|
||||||
COURSE_MATERIAL_STATE = 'cmst'
|
|
||||||
COURSE_NAME = 'cona'
|
|
||||||
COURSE_STATE = 'cost'
|
|
||||||
COURSE_STUDENTGROUP = 'cosg'
|
|
||||||
COURSE_STUDENTGROUP_MEMBER = 'csgm'
|
|
||||||
COURSE_SUBMISSION_ID = 'csid'
|
|
||||||
COURSE_SUBMISSION_STATE = 'csst'
|
|
||||||
COURSE_TOPIC = 'ctop'
|
|
||||||
COURSE_TOPIC_ID = 'ctoi'
|
|
||||||
COURSE_WORK = 'cwrk'
|
|
||||||
COURSE_WORK_ID = 'cwid'
|
|
||||||
COURSE_WORK_STATE = 'cwst'
|
|
||||||
CREATOR_ID = 'crid'
|
|
||||||
CREDENTIALS = 'cred'
|
|
||||||
CRITERIA = 'crit'
|
|
||||||
CROS_DEVICE = 'cros'
|
|
||||||
CROS_SERIAL_NUMBER = 'crsn'
|
|
||||||
CSE_IDENTITY = 'csei'
|
|
||||||
CSE_KEYPAIR = 'csek'
|
|
||||||
CUSTOMER_DOMAIN = 'cudo'
|
|
||||||
CUSTOMER_ID = 'cuid'
|
|
||||||
DATE = 'date'
|
|
||||||
DEFAULT_LANGUAGE = 'dfla'
|
|
||||||
DELEGATE = 'dele'
|
|
||||||
DELETED_USER = 'delu'
|
|
||||||
DELIVERY = 'deli'
|
|
||||||
DEVICE = 'devi'
|
|
||||||
DEVICE_FILE = 'devf'
|
|
||||||
DIRECTORY = 'drct'
|
|
||||||
DEVICE_USER = 'devu'
|
|
||||||
DEVICE_USER_CLIENT_STATE = 'ducs'
|
|
||||||
DISCOVERY_JSON_FILE = 'disc'
|
|
||||||
DOCUMENT = 'docu'
|
|
||||||
DOMAIN = 'doma'
|
|
||||||
DOMAIN_ALIAS = 'doal'
|
|
||||||
DOMAIN_CONTACT = 'doco'
|
|
||||||
DOMAIN_PEOPLE_CONTACT = 'dopc'
|
|
||||||
DOMAIN_PROFILE = 'dopr'
|
|
||||||
DRIVE_DISK_USAGE = 'drdu'
|
|
||||||
DRIVE_FILE = 'dfil'
|
|
||||||
DRIVE_FILE_COMMENT = 'filc'
|
|
||||||
DRIVE_FILE_ID = 'fili'
|
|
||||||
DRIVE_FILE_NAME = 'filn'
|
|
||||||
DRIVE_FILE_RENAMED = 'firn'
|
|
||||||
DRIVE_FILE_REVISION = 'filr'
|
|
||||||
DRIVE_FILE_SHORTCUT = 'fils'
|
|
||||||
DRIVE_FILE_OR_FOLDER = 'fifo'
|
|
||||||
DRIVE_FILE_OR_FOLDER_ACL = 'fiac'
|
|
||||||
DRIVE_FILE_OR_FOLDER_ID = 'fifi'
|
|
||||||
DRIVE_FOLDER = 'fold'
|
|
||||||
DRIVE_FOLDER_ID = 'foli'
|
|
||||||
DRIVE_FOLDER_NAME = 'foln'
|
|
||||||
DRIVE_FOLDER_PATH = 'folp'
|
|
||||||
DRIVE_FOLDER_RENAMED = 'forn'
|
|
||||||
DRIVE_FOLDER_SHORTCUT = 'fols'
|
|
||||||
DRIVE_ORPHAN_FILE_OR_FOLDER = 'orph'
|
|
||||||
DRIVE_PARENT_FOLDER = 'fipf'
|
|
||||||
DRIVE_PARENT_FOLDER_ID = 'fipi'
|
|
||||||
DRIVE_PARENT_FOLDER_REFERENCE = 'pfrf'
|
|
||||||
DRIVE_PATH = 'drvp'
|
|
||||||
DRIVE_SETTINGS = 'drvs'
|
|
||||||
DRIVE_SHORTCUT = 'drsc'
|
|
||||||
DRIVE_SHORTCUT_ID = 'dsci'
|
|
||||||
DRIVE_3PSHORTCUT = 'dr3s'
|
|
||||||
DRIVE_TRASH = 'drvt'
|
|
||||||
EMAIL = 'emai'
|
|
||||||
EMAIL_ALIAS = 'emal'
|
|
||||||
EMAIL_SETTINGS = 'emse'
|
|
||||||
END_TIME = 'endt'
|
|
||||||
ENTITY = 'enti'
|
|
||||||
EVENT = 'evnt'
|
|
||||||
EVENT_BIRTHDAY = 'evbd'
|
|
||||||
EVENT_FOCUSTIME = 'evft'
|
|
||||||
EVENT_OUTOFOFFICE = 'evoo'
|
|
||||||
EVENT_WORKINGLOCATION = 'evwl'
|
|
||||||
FEATURE = 'feat'
|
|
||||||
FIELD = 'fiel'
|
|
||||||
FILE = 'file'
|
|
||||||
FILE_PARENT_TREE = 'fptr'
|
|
||||||
FILTER = 'filt'
|
|
||||||
FORM = 'form'
|
|
||||||
FORM_RESPONSE = 'frmr'
|
|
||||||
FORWARD_ENABLED = 'fwde'
|
|
||||||
FORWARDING_ADDRESS = 'fwda'
|
|
||||||
GCP_FOLDER = 'gcpf'
|
|
||||||
GCP_FOLDER_NAME = 'gcpn'
|
|
||||||
GCP_ORG_ID = 'gcpo'
|
|
||||||
GMAIL_PROFILE = 'gmpr'
|
|
||||||
GROUP = 'grou'
|
|
||||||
GROUP_ALIAS = 'gali'
|
|
||||||
GROUP_EMAIL = 'gale'
|
|
||||||
GROUP_MEMBERSHIP = 'gmem'
|
|
||||||
GROUP_MEMBERSHIP_TREE = 'gmtr'
|
|
||||||
GROUP_SETTINGS = 'gset'
|
|
||||||
GROUP_TREE = 'gtre'
|
|
||||||
GUARDIAN = 'guar'
|
|
||||||
GUARDIAN_INVITATION = 'gari'
|
|
||||||
GUARDIAN_AND_INVITATION = 'gani'
|
|
||||||
GUEST_USER = 'gstu'
|
|
||||||
IAM_POLICY = 'iamp'
|
|
||||||
IMAP_ENABLED = 'imap'
|
|
||||||
INBOUND_SSO_ASSIGNMENT = 'insa'
|
|
||||||
INBOUND_SSO_CREDENTIALS = 'insc'
|
|
||||||
INBOUND_SSO_PROFILE = 'insp'
|
|
||||||
INSTANCE = 'inst'
|
|
||||||
ITEM = 'item'
|
|
||||||
ISSUER_CN = 'iscn'
|
|
||||||
KEYBOARD_SHORTCUTS_ENABLED = 'kbsc'
|
|
||||||
LABEL = 'labe'
|
|
||||||
LABEL_ID = 'labi'
|
|
||||||
LANGUAGE = 'lang'
|
|
||||||
LICENSE = 'lice'
|
|
||||||
LOCATION = 'loca'
|
|
||||||
LOOKERSTUDIO_ASSET = 'lsas'
|
|
||||||
LOOKERSTUDIO_ASSET_DATASOURCE = 'lsad'
|
|
||||||
LOOKERSTUDIO_ASSETID = 'lsai'
|
|
||||||
LOOKERSTUDIO_ASSET_REPORT = 'lsar'
|
|
||||||
LOOKERSTUDIO_PERMISSION = 'lspe'
|
|
||||||
MD5HASH = 'md5h'
|
|
||||||
MEET_SPACE = 'mesp'
|
|
||||||
MEET_CONFERENCE = 'msco'
|
|
||||||
MEET_PARTICIPANT = 'msps'
|
|
||||||
MEET_RECORDING = 'msre'
|
|
||||||
MEET_TRANSCRIPT = 'mstr'
|
|
||||||
MEMBER = 'memb'
|
|
||||||
MEMBER_NOT_ARCHIVED = 'mena'
|
|
||||||
MEMBER_ARCHIVED = 'mear'
|
|
||||||
MEMBER_NOT_SUSPENDED = 'mens'
|
|
||||||
MEMBER_SUSPENDED = 'mesu'
|
|
||||||
MEMBER_NOT_SUSPENDED_NOT_ARCHIVED = 'nsna'
|
|
||||||
MEMBER_SUSPENDED_ARCHIVED = 'suar'
|
|
||||||
MEMBER_RESTRICTION = 'memr'
|
|
||||||
MEMBER_URI = 'memu'
|
|
||||||
MEMBERSHIP_TREE = 'metr'
|
|
||||||
MESSAGE = 'mesg'
|
|
||||||
MIMETYPE = 'mime'
|
|
||||||
MOBILE_DEVICE = 'mobi'
|
|
||||||
NAME = 'name'
|
|
||||||
NONEDITABLE_ALIAS = 'neal'
|
|
||||||
NOTE = 'note'
|
|
||||||
NOTE_ACL = 'nota'
|
|
||||||
NOTES_ACLS = 'naac'
|
|
||||||
NOTIFICATION = 'noti'
|
|
||||||
OAUTH2_TXT_FILE = 'oaut'
|
|
||||||
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
|
||||||
ORGANIZATIONAL_UNIT = 'orgu'
|
|
||||||
OTHER_CONTACT = 'otco'
|
|
||||||
OWNER = 'ownr'
|
|
||||||
OWNER_ID = 'owid'
|
|
||||||
PAGE_SIZE = 'page'
|
|
||||||
PARENT_ORGANIZATIONAL_UNIT = 'porg'
|
|
||||||
PARTICIPANT = 'part'
|
|
||||||
PEOPLE_CONTACT = 'peco'
|
|
||||||
PEOPLE_CONTACT_GROUP = 'pecg'
|
|
||||||
PEOPLE_PHOTO = 'peph'
|
|
||||||
PEOPLE_PROFILE = 'pepr'
|
|
||||||
PERMISSION = 'perm'
|
|
||||||
PERMISSION_ID = 'peid'
|
|
||||||
PERMITTEE = 'prmt'
|
|
||||||
PERSONAL_DEVICE = 'pedv'
|
|
||||||
PHOTO = 'phot'
|
|
||||||
POLICY = 'poli'
|
|
||||||
POP_ENABLED = 'popa'
|
|
||||||
PRESENTATION = 'pres'
|
|
||||||
PRINTER = 'prin'
|
|
||||||
PRINTER_ID = 'prid'
|
|
||||||
PRINTER_MODEL = 'prmd'
|
|
||||||
PRIVILEGE = 'priv'
|
|
||||||
PRODUCT = 'prod'
|
|
||||||
PROFILE_SHARING_ENABLED = 'prof'
|
|
||||||
PROJECT = 'proj'
|
|
||||||
PROJECT_FOLDER = 'prjf'
|
|
||||||
PROJECT_ID = 'prji'
|
|
||||||
PUBLIC_KEY = 'pubk'
|
|
||||||
QUERY = 'quer'
|
|
||||||
RECIPIENT = 'recp'
|
|
||||||
RECIPIENT_BCC = 'rebc'
|
|
||||||
RECIPIENT_CC = 'recc'
|
|
||||||
REPORT = 'rept'
|
|
||||||
REQUEST_ID = 'reqi'
|
|
||||||
RESOURCE_CALENDAR = 'resc'
|
|
||||||
RESOURCE_ID = 'resi'
|
|
||||||
ROLE = 'role'
|
|
||||||
ROW = 'row '
|
|
||||||
SCOPE = 'scop'
|
|
||||||
SECTION = 'sect'
|
|
||||||
SENDAS_ADDRESS = 'sasa'
|
|
||||||
SENDER = 'send'
|
|
||||||
SERVICE = 'serv'
|
|
||||||
SHAREDDRIVE = 'tdrv'
|
|
||||||
SHAREDDRIVE_ACL = 'tdac'
|
|
||||||
SHAREDDRIVE_FOLDER = 'tdfo'
|
|
||||||
SHAREDDRIVE_ID = 'tdid'
|
|
||||||
SHAREDDRIVE_NAME = 'tdna'
|
|
||||||
SHAREDDRIVE_THEME = 'tdth'
|
|
||||||
SHEET = 'shet'
|
|
||||||
SHEET_ID = 'shti'
|
|
||||||
SIGNATURE = 'sign'
|
|
||||||
SIZE = 'size'
|
|
||||||
SKU = 'sku '
|
|
||||||
SMIME_ID = 'smid'
|
|
||||||
SNIPPETS_ENABLED = 'snip'
|
|
||||||
SSO_KEY = 'ssok'
|
|
||||||
SSO_SETTINGS = 'ssos'
|
|
||||||
SOURCE_USER = 'srcu'
|
|
||||||
SPREADSHEET = 'sprd'
|
|
||||||
SPREADSHEET_RANGE = 'ssrn'
|
|
||||||
START_TIME = 'strt'
|
|
||||||
STATUS = 'stat'
|
|
||||||
STUDENT = 'stud'
|
|
||||||
SUBSCRIPTION = 'subs'
|
|
||||||
SVCACCT = 'svac'
|
|
||||||
SVCACCT_KEY = 'svky'
|
|
||||||
TAGMANAGER_ACCOUNT = 'tmac'
|
|
||||||
TAGMANAGER_CONTAINER = 'tmco'
|
|
||||||
TAGMANAGER_PERMISSION = 'tmpm'
|
|
||||||
TAGMANAGER_TAG = 'tmtg'
|
|
||||||
TAGMANAGER_WORKSPACE = 'tmws'
|
|
||||||
TARGET_USER = 'tgt '
|
|
||||||
TASK = 'task'
|
|
||||||
TASKLIST = 'tali'
|
|
||||||
TEACHER = 'teac'
|
|
||||||
THREAD = 'thre'
|
|
||||||
TRANSFER_APPLICATION = 'trap'
|
|
||||||
TRANSFER_ID = 'trid'
|
|
||||||
TRANSFER_REQUEST = 'trnr'
|
|
||||||
TRASHED_EVENT = 'trev'
|
|
||||||
TRUSTED_APPLICATION = 'trus'
|
|
||||||
TYPE = 'type'
|
|
||||||
UNICODE_ENCODING_ENABLED = 'unic'
|
|
||||||
UNIQUE_ID = 'uniq'
|
|
||||||
URL = 'url '
|
|
||||||
USER = 'user'
|
|
||||||
USER_ALIAS = 'uali'
|
|
||||||
USER_NOT_ARCHIVED = 'usna'
|
|
||||||
USER_ARCHIVED = 'usar'
|
|
||||||
USER_EMAIL = 'uema'
|
|
||||||
USER_INVITATION = 'uinv'
|
|
||||||
USER_NOT_SUSPENDED = 'usns'
|
|
||||||
USER_SUSPENDED = 'usup'
|
|
||||||
USER_SCHEMA = 'usch'
|
|
||||||
VACATION = 'vaca'
|
|
||||||
VACATION_ENABLED = 'vace'
|
|
||||||
VALUE = 'val'
|
|
||||||
VAULT_EXPORT = 'vlte'
|
|
||||||
VAULT_HOLD = 'vlth'
|
|
||||||
VAULT_MATTER = 'vltm'
|
|
||||||
VAULT_MATTER_ARTIFACT = 'vlma'
|
|
||||||
VAULT_MATTER_ID = 'vlmi'
|
|
||||||
VAULT_OPERATION = 'vlto'
|
|
||||||
VAULT_QUERY = 'vltq'
|
|
||||||
WEB_MASTERSITE = 'wems'
|
|
||||||
WEB_RESOURCE = 'were'
|
|
||||||
WEBCLIPS_ENABLED = 'webc'
|
|
||||||
YOUTUBE_CHANNEL = 'ytch'
|
|
||||||
# _NAMES[0] is plural, _NAMES[1] is singular unless the item name is explicitly plural (Calendar Settings)
|
|
||||||
# For items with Boolean values, both entries are singular (Forward, POP)
|
|
||||||
# These values can be translated into other languages
|
|
||||||
_NAMES = {
|
|
||||||
ACCESS_TOKEN: ['Access Tokens', 'Access Token'],
|
|
||||||
ACCOUNT: ['Google Workspace Accounts', 'Google Workspace Account'],
|
|
||||||
ACTION: ['Actions', 'Action'],
|
|
||||||
ACTIVITY: ['Activities', 'Activity'],
|
|
||||||
ADMINISTRATOR: ['Administrators', 'Administrator'],
|
|
||||||
ADMIN_ROLE: ['Admin Roles', 'Admin Role'],
|
|
||||||
ADMIN_ROLE_ASSIGNMENT: ['Admin Role Assignments', 'Admin Role Assignment'],
|
|
||||||
ALERT: ['Alerts', 'Alert'],
|
|
||||||
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
|
||||||
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
|
||||||
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
|
||||||
ALERT_SETTINGS: ['Alert Settings', 'Alert Settings'],
|
|
||||||
ALIAS: ['Aliases', 'Alias'],
|
|
||||||
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
|
||||||
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
|
||||||
ANALYTIC_ACCOUNT: ['Analytic Accounts', 'Analytic Account'],
|
|
||||||
ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
|
|
||||||
ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
|
|
||||||
ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
|
|
||||||
API: ['APIs', 'API'],
|
|
||||||
APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
|
|
||||||
APP_ID: ['Application IDs', 'Application ID'],
|
|
||||||
APP_NAME: ['Application Names', 'Application Name'],
|
|
||||||
APPLICATION_SPECIFIC_PASSWORD: ['Application Specific Password IDs', 'Application Specific Password ID'],
|
|
||||||
ARROWS_ENABLED: ['Personal Indicator Arrows Enabled', 'Personal Indicator Arrows Enabled'],
|
|
||||||
ATTACHMENT: ['Attachments', 'Attachment'],
|
|
||||||
ATTENDEE: ['Attendees', 'Attendee'],
|
|
||||||
AUDIT_ACTIVITY_REQUEST: ['Audit Activity Requests', 'Audit Activity Request'],
|
|
||||||
AUDIT_EXPORT_REQUEST: ['Audit Export Requests', 'Audit Export Request'],
|
|
||||||
AUDIT_MONITOR_REQUEST: ['Audit Monitor Requests', 'Audit Monitor Request'],
|
|
||||||
BACKUP_VERIFICATION_CODES: ['Backup Verification Codes', 'Backup Verification Codes'],
|
|
||||||
BUILDING: ['Buildings', 'Building'],
|
|
||||||
BUILDING_ID: ['Building IDs', 'Building ID'],
|
|
||||||
BUSINESS_PROFILE_ACCOUNT: ['Business Profile Accounts', 'Business Profile Account'],
|
|
||||||
CAA_LEVEL: ['CAA Levels', 'CAA Level'],
|
|
||||||
CALENDAR: ['Calendars', 'Calendar'],
|
|
||||||
CALENDAR_ACL: ['Calendar ACLs', 'Calendar ACL'],
|
|
||||||
CALENDAR_SETTINGS: ['Calendar Settings', 'Calendar Settings'],
|
|
||||||
CHANNEL_CUSTOMER: ['Channel Customers', 'Channel Customer'],
|
|
||||||
CHANNEL_CUSTOMER_ENTITLEMENT: ['Channel Customer Entitlements', 'Channel Customer Entitlement'],
|
|
||||||
CHANNEL_OFFER: ['Channel Offers', 'Channel Offer'],
|
|
||||||
CHANNEL_PRODUCT: ['Channel Products', 'Channel Product'],
|
|
||||||
CHANNEL_SKU: ['Channel SKUs', 'Channel SKU'],
|
|
||||||
CHAT_BOT: ['Chat BOTs', 'Chat BOT'],
|
|
||||||
CHAT_ADMIN: ['Chat Admins', 'Chat Admin'],
|
|
||||||
CHAT_EMOJI: ['Chat Emojis', 'Chat Emoji'],
|
|
||||||
CHAT_EVENT: ['Chat Events', 'Chat Event'],
|
|
||||||
CHAT_MANAGER_USER: ['Chat User Managers', 'Chat User Manager'],
|
|
||||||
CHAT_MESSAGE: ['Chat Messages', 'Chat Message'],
|
|
||||||
CHAT_MESSAGE_ID: ['Chat Message IDs', 'Chat Message ID'],
|
|
||||||
CHAT_MEMBER: ['Chat Members', 'Chat Member'],
|
|
||||||
CHAT_MEMBER_GROUP: ['Chat Group Members', 'Chat Group Member'],
|
|
||||||
CHAT_MEMBER_USER: ['Chat User Members', 'Chat User Member'],
|
|
||||||
CHAT_OWNER_USER: ['Chat User Owners', 'Chat User Owner'],
|
|
||||||
CHAT_SECTION: ['Chat User Sections', 'Chat User Section'],
|
|
||||||
CHAT_SECTION_ITEM: ['Chat User Section Items', 'Chat User Section Item'],
|
|
||||||
CHAT_SPACE: ['Chat Spaces', 'Chat Space'],
|
|
||||||
CHAT_THREAD: ['Chat Threads', 'Chat Thread'],
|
|
||||||
CHILD_ORGANIZATIONAL_UNIT: ['Child Organizational Units', 'Child Organizational Unit'],
|
|
||||||
CHROME_APP: ['Chrome Applications', 'Chrome Application'],
|
|
||||||
CHROME_APP_DEVICE: ['Chrome Application Devices', 'Chrome Application Device'],
|
|
||||||
CHROME_BROWSER: ['Chrome Browsers', 'Chrome Browser'],
|
|
||||||
CHROME_BROWSER_ENROLLMENT_TOKEN: ['Chrome Browser Enrollment Tokens', 'Chrome Browser Enrollment Token'],
|
|
||||||
CHROME_CHANNEL: ['Chrome Channels', 'Chrome Channel'],
|
|
||||||
CHROME_DEVICE: ['Chrome Devices', 'Chrome Device'],
|
|
||||||
CHROME_DEVICE_COUNT: ['Chrome Device Counts', 'Chrome Device Count'],
|
|
||||||
CHROME_MODEL: ['Chrome Models', 'Chrome Model'],
|
|
||||||
CHROME_NETWORK_ID: ['Chrome Network IDs', 'Chrome Network ID'],
|
|
||||||
CHROME_NETWORK_NAME: ['Chrome Network Names', 'Chrome Network Name'],
|
|
||||||
CHROME_PLATFORM: ['Chrome Platforms', 'Chrome Platform'],
|
|
||||||
CHROME_POLICY: ['Chrome Policies', 'Chrome Policy'],
|
|
||||||
CHROME_POLICY_IMAGE: ['Chrome Policy Images', 'Chrome Policy Image'],
|
|
||||||
CHROME_POLICY_SCHEMA: ['Chrome Policy Schemas', 'Chrome Policy Schema'],
|
|
||||||
CHROME_PROFILE: ['Chrome Profiles', 'Chrome Profile'],
|
|
||||||
CHROME_PROFILE_COMMAND: ['Chrome Profile Commands', 'Chrome Profile Command'],
|
|
||||||
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'],
|
|
||||||
CLASSROOM_INVITATION_TEACHER: ['Classroom Teacher Invitations', 'Classroom Teacher Invitation'],
|
|
||||||
CLASSROOM_OAUTH2_TXT_FILE: ['Classroom OAuth2 File', 'Classroom OAuth2 File'],
|
|
||||||
CLASSROOM_USER_PROFILE: ['Classroom User Profile', 'Classroom User Profile'],
|
|
||||||
CLIENT_ID: ['Client IDs', 'Client ID'],
|
|
||||||
CLIENT_SECRETS_JSON_FILE: ['Client Secrets File', 'Client Secrets File'],
|
|
||||||
CLOUD_IDENTITY_GROUP: ['Cloud Identity Groups', 'Cloud Identity Group'],
|
|
||||||
CLOUD_STORAGE_BUCKET: ['Cloud Storage Buckets', 'Cloud Storage Bucket'],
|
|
||||||
CLOUD_STORAGE_FILE: ['Cloud Storage Files', 'Cloud Storage File'],
|
|
||||||
COLLABORATOR: ['Collaborators', 'Collaborator'],
|
|
||||||
COMMAND_ID: ['Command IDs', 'Command ID'],
|
|
||||||
COMPANY_DEVICE: ['Company Devices', 'Company Device'],
|
|
||||||
CONFIG_FILE: ['Config File', 'Config File'],
|
|
||||||
CONTACT: ['Contacts', 'Contact'],
|
|
||||||
CONTACT_DELEGATE: ['Contact Delegates', 'Contact Delegate'],
|
|
||||||
CONTACT_GROUP: ['Contact Groups', 'Contact Group'],
|
|
||||||
CONTACT_GROUP_NAME: ['Contact Group Names', 'Contact Group Name'],
|
|
||||||
COPYFROM_COURSE: ['Copy From Courses', 'CopyFrom Course'],
|
|
||||||
COPYFROM_GROUP: ['Copy From Groups', 'CopyFrom Group'],
|
|
||||||
COURSE: ['Courses', 'Course'],
|
|
||||||
COURSE_ALIAS: ['Course Aliases', 'Course Alias'],
|
|
||||||
COURSE_ANNOUNCEMENT: ['Course Announcements', 'Course Announcement'],
|
|
||||||
COURSE_ANNOUNCEMENT_ID: ['Course Announcement IDs', 'Course Announcement ID'],
|
|
||||||
COURSE_ANNOUNCEMENT_STATE: ['Course Announcement States', 'Course Announcement State'],
|
|
||||||
COURSE_MATERIAL_DRIVEFILE: ['Course Material Drive Files', 'Course Material Drive File'],
|
|
||||||
COURSE_MATERIAL_FORM: ['Course Material Forms', 'Course Material Form'],
|
|
||||||
COURSE_MATERIAL: ['Course Materials', 'Course Material'],
|
|
||||||
COURSE_MATERIAL_ID: ['Course Material IDs', 'Course Material ID'],
|
|
||||||
COURSE_MATERIAL_STATE: ['Course Material States', 'Course Material State'],
|
|
||||||
COURSE_NAME: ['Course Names', 'Course Name'],
|
|
||||||
COURSE_STATE: ['Course States', 'Course State'],
|
|
||||||
COURSE_STUDENTGROUP: ['Course Student Groups', 'Course Student Group'],
|
|
||||||
COURSE_STUDENTGROUP_MEMBER: ['Course Student Group Members', 'Course Student Group Member'],
|
|
||||||
COURSE_SUBMISSION_ID: ['Course Submission IDs', 'Course Submission ID'],
|
|
||||||
COURSE_SUBMISSION_STATE: ['Course Submission States', 'Course Submission State'],
|
|
||||||
COURSE_TOPIC: ['Course Topics', 'Course Topic'],
|
|
||||||
COURSE_TOPIC_ID: ['Course Topic IDs', 'Course Topic ID'],
|
|
||||||
COURSE_WORK: ['Course Works', 'Course Work'],
|
|
||||||
COURSE_WORK_ID: ['Course Work IDs', 'Course Work ID'],
|
|
||||||
COURSE_WORK_STATE: ['Course Work States', 'Course Work State'],
|
|
||||||
CREATOR_ID: ['Creator IDs', 'Creator ID'],
|
|
||||||
CREDENTIALS: ['Credentials', 'Credentials'],
|
|
||||||
CRITERIA: ['Criteria', 'Criteria'],
|
|
||||||
CROS_DEVICE: ['CrOS Devices', 'CrOS Device'],
|
|
||||||
CROS_SERIAL_NUMBER: ['CrOS Serial Numbers', 'CrOS Serial Numbers'],
|
|
||||||
CSE_IDENTITY: ['CSE Identities', 'CSE Identity'],
|
|
||||||
CSE_KEYPAIR: ['CSE KeyPairs', 'CSE KeyPair'],
|
|
||||||
CUSTOMER_DOMAIN: ['Customer Domains', 'Customer Domain'],
|
|
||||||
CUSTOMER_ID: ['Customer IDs', 'Customer ID'],
|
|
||||||
DATE: ['Dates', 'Date'],
|
|
||||||
DEFAULT_LANGUAGE: ['Default Language', 'Default Language'],
|
|
||||||
DELEGATE: ['Delegates', 'Delegate'],
|
|
||||||
DELETED_USER: ['Deleted Users', 'Deleted User'],
|
|
||||||
DELIVERY: ['Delivery', 'Delivery'],
|
|
||||||
DEVICE: ['Devices', 'Device'],
|
|
||||||
DEVICE_FILE: ['Device Files', 'Device File'],
|
|
||||||
DEVICE_USER: ['Device Users', 'Device User'],
|
|
||||||
DEVICE_USER_CLIENT_STATE: ['Device Users Client States', 'Device User Client State'],
|
|
||||||
DIRECTORY: ['Directories', 'Directory'],
|
|
||||||
DISCOVERY_JSON_FILE: ['Discovery File', 'Discovery File'],
|
|
||||||
DOCUMENT: ['Documents', 'Document'],
|
|
||||||
DOMAIN: ['Domains', 'Domain'],
|
|
||||||
DOMAIN_ALIAS: ['Domain Aliases', 'Domain Alias'],
|
|
||||||
DOMAIN_CONTACT: ['Domain Contacts', 'Domain Contact'],
|
|
||||||
DOMAIN_PEOPLE_CONTACT: ['Domain People Contacts', 'Domain People Contact'],
|
|
||||||
DOMAIN_PROFILE: ['Domain Profiles', 'Domain Profile'],
|
|
||||||
DRIVE_DISK_USAGE: ['Drive Disk Usages', 'Drive Disk Usage'],
|
|
||||||
DRIVE_FILE: ['Drive Files', 'Drive File'],
|
|
||||||
DRIVE_FILE_COMMENT: ['Drive File Comments', 'Drive File Comment'],
|
|
||||||
DRIVE_FILE_ID: ['Drive File IDs', 'Drive File ID'],
|
|
||||||
DRIVE_FILE_NAME: ['Drive File Names', 'Drive File Name'],
|
|
||||||
DRIVE_FILE_REVISION: ['Drive File Revisions', 'Drive File Revision'],
|
|
||||||
DRIVE_FILE_RENAMED: ['Drive Files Renamed', 'Drive File Renamed'],
|
|
||||||
DRIVE_FILE_SHORTCUT: ['Drive File Shortcuts', 'Drive File Shortcut'],
|
|
||||||
DRIVE_FILE_OR_FOLDER: ['Drive Files/Folders', 'Drive File/Folder'],
|
|
||||||
DRIVE_FILE_OR_FOLDER_ACL: ['Drive File/Folder ACLs', 'Drive File/Folder ACL'],
|
|
||||||
DRIVE_FILE_OR_FOLDER_ID: ['Drive File/Folder IDs', 'Drive File/Folder ID'],
|
|
||||||
DRIVE_FOLDER: ['Drive Folders', 'Drive Folder'],
|
|
||||||
DRIVE_FOLDER_ID: ['Drive Folder IDs', 'Drive Folder ID'],
|
|
||||||
DRIVE_FOLDER_NAME: ['Drive Folder Names', 'Drive Folder Name'],
|
|
||||||
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_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'],
|
|
||||||
DRIVE_PARENT_FOLDER_REFERENCE: ['Drive Parent Folder References', 'Drive Parent Folder Reference'],
|
|
||||||
DRIVE_PATH: ['Drive Paths', 'Drive Path'],
|
|
||||||
DRIVE_SETTINGS: ['Drive Settings', 'Drive Settings'],
|
|
||||||
DRIVE_SHORTCUT: ['Drive Shortcuts', 'Drive Shortcut'],
|
|
||||||
DRIVE_SHORTCUT_ID: ['Drive Shortcut IDs', 'Drive Shortcut ID'],
|
|
||||||
DRIVE_3PSHORTCUT: ['Drive 3rd Party Shortcuts', 'Drive 3rd Party Shortcut'],
|
|
||||||
DRIVE_TRASH: ['Drive Trash', 'Drive Trash'],
|
|
||||||
EMAIL: ['Email Addresses', 'Email Address'],
|
|
||||||
EMAIL_ALIAS: ['Email Aliases', 'Email Alias'],
|
|
||||||
EMAIL_SETTINGS: ['Email Settings', 'Email Settings'],
|
|
||||||
END_TIME: ['End Times', 'End Time'],
|
|
||||||
ENTITY: ['Entities', 'Entity'],
|
|
||||||
EVENT: ['Events', 'Event'],
|
|
||||||
EVENT_BIRTHDAY: ['Borthday Events', 'Birthday Event'],
|
|
||||||
EVENT_FOCUSTIME: ['Focus Time Events', 'Focus Time Event'],
|
|
||||||
EVENT_OUTOFOFFICE: ['Out of Office Events', 'Out of Office Event'],
|
|
||||||
EVENT_WORKINGLOCATION: ['Working Location Events', 'Working Location Event'],
|
|
||||||
FEATURE: ['Features', 'Feature'],
|
|
||||||
FIELD: ['Fields', 'Field'],
|
|
||||||
FILE: ['Files', 'File'],
|
|
||||||
FILE_PARENT_TREE: ['File Parent Trees', 'File Parent Tree'],
|
|
||||||
FILTER: ['Filters', 'Filter'],
|
|
||||||
FORM: ['Forms', 'Form'],
|
|
||||||
FORM_RESPONSE: ['Form Responses', 'Form Response'],
|
|
||||||
FORWARD_ENABLED: ['Forward Enabled', 'Forward Enabled'],
|
|
||||||
FORWARDING_ADDRESS: ['Forwarding Addresses', 'Forwarding Address'],
|
|
||||||
GCP_FOLDER: ['GCP Folders', 'GCP Folder'],
|
|
||||||
GCP_FOLDER_NAME: ['GCP Folder Names', 'GCP Folder Name'],
|
|
||||||
GCP_ORG_ID: ['GCP Organization ID', 'GCP Organization ID'],
|
|
||||||
GMAIL_PROFILE: ['Gmail Profile', 'Gmail Profile'],
|
|
||||||
GROUP: ['Groups', 'Group'],
|
|
||||||
GROUP_ALIAS: ['Group Aliases', 'Group Alias'],
|
|
||||||
GROUP_EMAIL: ['Group Emails', 'Group Email'],
|
|
||||||
GROUP_MEMBERSHIP: ['Group Memberships', 'Group Membership'],
|
|
||||||
GROUP_MEMBERSHIP_TREE: ['Group Membership Trees', 'Group Membership Tree'],
|
|
||||||
GROUP_SETTINGS: ['Group Settings', 'Group Settings'],
|
|
||||||
GROUP_TREE: ['Group Trees', 'Group Tree'],
|
|
||||||
GUEST_USER: ['Guest Users', 'Guest User'],
|
|
||||||
GUARDIAN: ['Guardians', 'Guardian'],
|
|
||||||
GUARDIAN_INVITATION: ['Guardian Invitations', 'Guardian Invitation'],
|
|
||||||
GUARDIAN_AND_INVITATION: ['Guardians and Invitations', 'Guardian and Invitation'],
|
|
||||||
IAM_POLICY: ['IAM Policies', 'IAM Policy'],
|
|
||||||
IMAP_ENABLED: ['IMAP Enabled', 'IMAP Enabled'],
|
|
||||||
INBOUND_SSO_ASSIGNMENT: ['Inbound SSO Assignments', 'Inbound SSO Assignment'],
|
|
||||||
INBOUND_SSO_CREDENTIALS: ['Inbound SSO Credentials', 'Inbound SSO Credential'],
|
|
||||||
INBOUND_SSO_PROFILE: ['Inbound SSO Profiles', 'Inbound SSO Profile'],
|
|
||||||
INSTANCE: ['Instances', 'Instance'],
|
|
||||||
ISSUER_CN: ['Issuer CNs', 'Issuer CN'],
|
|
||||||
ITEM: ['Items', 'Item'],
|
|
||||||
KEYBOARD_SHORTCUTS_ENABLED: ['Keyboard Shortcuts Enabled', 'Keyboard Shortcuts Enabled'],
|
|
||||||
LABEL: ['Labels', 'Label'],
|
|
||||||
LABEL_ID: ['Label IDs', 'Label ID'],
|
|
||||||
LANGUAGE: ['Languages', 'Language'],
|
|
||||||
LICENSE: ['Licenses', 'License'],
|
|
||||||
LOCATION: ['Locations', 'Location'],
|
|
||||||
LOOKERSTUDIO_ASSET: ['Looker Studio Assets', 'Looker Studio Asset'],
|
|
||||||
LOOKERSTUDIO_ASSET_DATASOURCE: ['Looker Studio DATA_SOURCE Assets', 'Looker Studio DATA_SOURCE Asset'],
|
|
||||||
LOOKERSTUDIO_ASSETID: ['Looker Studio Asset IDs', 'Looker Studio Asset ID'],
|
|
||||||
LOOKERSTUDIO_ASSET_REPORT: ['Looker Studio REPORT Assets', 'Looker Studio REPORT Asset'],
|
|
||||||
LOOKERSTUDIO_PERMISSION: ['Looker Studio Permissions', 'Looker Studio Permission'],
|
|
||||||
MD5HASH: ['MD5 hash', 'MD5 Hash'],
|
|
||||||
MEET_SPACE: ['Meet Spaces', 'Meet Space'],
|
|
||||||
MEET_CONFERENCE: ['Meet Conferences', 'Meet Conference'],
|
|
||||||
MEET_PARTICIPANT: ['Meet Participants', 'Meet Participant'],
|
|
||||||
MEET_RECORDING: ['Meet Recordings', 'Meet Recording'],
|
|
||||||
MEET_TRANSCRIPT: ['Meet Transcripts', 'Meet Transcript'],
|
|
||||||
MEMBER: ['Members', 'Member'],
|
|
||||||
MEMBER_NOT_ARCHIVED: ['Members (Not Archived)', 'Member (Not Archived)'],
|
|
||||||
MEMBER_ARCHIVED: ['Members (Archived)', 'Member (Archived)'],
|
|
||||||
MEMBER_NOT_SUSPENDED: ['Members (Not Suspended)', 'Member (Not Suspended)'],
|
|
||||||
MEMBER_SUSPENDED: ['Members (Suspended)', 'Member (Suspended)'],
|
|
||||||
MEMBER_NOT_SUSPENDED_NOT_ARCHIVED: ['Members (Not Suspended & Not Archived)', 'Member (Not Suspended & Not Archived)'],
|
|
||||||
MEMBER_SUSPENDED_ARCHIVED: ['Members (Suspended & Archived)', 'Member (Suspended & Archived)'],
|
|
||||||
MEMBER_RESTRICTION: ['Member Restrictions', 'Member Restriction'],
|
|
||||||
MEMBER_URI: ['Member URIs', 'Member URI'],
|
|
||||||
MEMBERSHIP_TREE: ['Membership Trees', 'Membership Tree'],
|
|
||||||
MESSAGE: ['Messages', 'Message'],
|
|
||||||
MIMETYPE: ['MIME Types', 'MIME Type'],
|
|
||||||
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
|
||||||
NAME: ['Names', 'Name'],
|
|
||||||
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
|
||||||
NOTE: ['Notes', 'Note'],
|
|
||||||
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
|
||||||
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
|
||||||
NOTIFICATION: ['Notifications', 'Notification'],
|
|
||||||
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
|
||||||
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
|
||||||
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
|
||||||
OTHER_CONTACT: ['Other Contacts', 'Other Contact'],
|
|
||||||
OWNER: ['Owners', 'Owner'],
|
|
||||||
OWNER_ID: ['Owner IDs', 'Owner ID'],
|
|
||||||
PAGE_SIZE: ['Page Size', 'Page Size'],
|
|
||||||
PARENT_ORGANIZATIONAL_UNIT: ['Parent Organizational Units', 'Parent Organizational Unit'],
|
|
||||||
PARTICIPANT: ['Participants', 'Participant'],
|
|
||||||
PEOPLE_CONTACT: ['People Contacts', 'Person Contact'],
|
|
||||||
PEOPLE_CONTACT_GROUP: ['People Contact Groups', 'People Contact Group'],
|
|
||||||
PEOPLE_PHOTO: ['People Photos', 'Person Photo'],
|
|
||||||
PEOPLE_PROFILE: ['People Profiles', 'People Profile'],
|
|
||||||
PERMISSION: ['Permissions', 'Permission'],
|
|
||||||
PERMISSION_ID: ['Permission IDs', 'Permission ID'],
|
|
||||||
PERMITTEE: ['Permittees', 'Permittee'],
|
|
||||||
PERSONAL_DEVICE: ['Personal Devices', 'Personal Device'],
|
|
||||||
PHOTO: ['Photos', 'Photo'],
|
|
||||||
POLICY: ['Policies', 'Policy'],
|
|
||||||
POP_ENABLED: ['POP Enabled', 'POP Enabled'],
|
|
||||||
PRESENTATION: ['Presentations', 'Presentation'],
|
|
||||||
PRINTER: ['Printers', 'Printer'],
|
|
||||||
PRINTER_ID: ['Printer IDs', 'Printer ID'],
|
|
||||||
PRINTER_MODEL: ['Printer Models', 'Printer Model'],
|
|
||||||
PRIVILEGE: ['Privileges', 'Privilege'],
|
|
||||||
PRODUCT: ['Products', 'Product'],
|
|
||||||
PROFILE_SHARING_ENABLED: ['Profile Sharing Enabled', 'Profile Sharing Enabled'],
|
|
||||||
PROJECT: ['Projects', 'Project'],
|
|
||||||
PROJECT_FOLDER: ['Project Folders', 'Project Folder'],
|
|
||||||
PROJECT_ID: ['Project IDs', 'Project ID'],
|
|
||||||
PUBLIC_KEY: ['Public Key', 'Public Key'],
|
|
||||||
QUERY: ['Queries', 'Query'],
|
|
||||||
RECIPIENT: ['Recipients', 'Recipient'],
|
|
||||||
RECIPIENT_BCC: ['Recipients (BCC)', 'Recipient (BCC)'],
|
|
||||||
RECIPIENT_CC: ['Recipients (CC)', 'Recipient (CC)'],
|
|
||||||
REPORT: ['Reports', 'Report'],
|
|
||||||
REQUEST_ID: ['Request IDs', 'Request ID'],
|
|
||||||
RESOURCE_CALENDAR: ['Resource Calendars', 'Resource Calendar'],
|
|
||||||
RESOURCE_ID: ['Resource IDs', 'Resource ID'],
|
|
||||||
ROLE: ['Roles', 'Role'],
|
|
||||||
ROW: ['Rows', 'Row'],
|
|
||||||
SCOPE: ['Scopes', 'Scope'],
|
|
||||||
SECTION: ['Sections', 'Section'],
|
|
||||||
SENDAS_ADDRESS: ['SendAs Addresses', 'SendAs Address'],
|
|
||||||
SENDER: ['Senders', 'Sender'],
|
|
||||||
SERVICE: ['Services', 'Service'],
|
|
||||||
SHAREDDRIVE: ['Shared Drives', 'Shared Drive'],
|
|
||||||
SHAREDDRIVE_ACL: ['Shared Drive ACLs', 'Shared Drive ACL'],
|
|
||||||
SHAREDDRIVE_FOLDER: ['Shared Drive Folders', 'Shared Drive Folder'],
|
|
||||||
SHAREDDRIVE_ID: ['Shared Drive IDs', 'Shared Drive ID'],
|
|
||||||
SHAREDDRIVE_NAME: ['Shared Drive Names', 'Shared Drive Name'],
|
|
||||||
SHAREDDRIVE_THEME: ['Shared Drive Themes', 'Shared Drive Theme'],
|
|
||||||
SHEET: ['Sheets', 'Sheet'],
|
|
||||||
SHEET_ID: ['Sheet IDs', 'Sheet ID'],
|
|
||||||
SIGNATURE: ['Signatures', 'Signature'],
|
|
||||||
SIZE: ['Sizes', 'Size'],
|
|
||||||
SKU: ['SKUs', 'SKU'],
|
|
||||||
SMIME_ID: ['S/MIME Certificate IDs', 'S/MIME Certificate ID'],
|
|
||||||
SNIPPETS_ENABLED: ['Preview Snippets Enabled', 'Preview Snippets Enabled'],
|
|
||||||
SSO_KEY: ['SSO Key', 'SSO Key'],
|
|
||||||
SSO_SETTINGS: ['SSO Settings', 'SSO Settings'],
|
|
||||||
SOURCE_USER: ['Source Users', 'Source User'],
|
|
||||||
SPREADSHEET: ['Spreadsheets', 'Spreadsheet'],
|
|
||||||
SPREADSHEET_RANGE: ['Spreadsheet Ranges', 'Spreadsheet Range'],
|
|
||||||
START_TIME: ['Start Times', 'Start Time'],
|
|
||||||
STATUS: ['Status', 'Status'],
|
|
||||||
STUDENT: ['Students', 'Student'],
|
|
||||||
SUBSCRIPTION: ['Subscriptions', 'Subscription'],
|
|
||||||
SVCACCT: ['Service Accounts', 'Service Account'],
|
|
||||||
SVCACCT_KEY: ['Service Account Keys', 'Service Account Key'],
|
|
||||||
TAGMANAGER_ACCOUNT: ['Tag Manager Accounts', 'Tag Manager Account'],
|
|
||||||
TAGMANAGER_CONTAINER: ['Tag Manager Containers', 'Tag Manager Container'],
|
|
||||||
TAGMANAGER_PERMISSION: ['Tag Manager Permissions', 'Tag Manager Permission'],
|
|
||||||
TAGMANAGER_TAG: ['Tag Manager Tags', 'Tag Manager Tag'],
|
|
||||||
TAGMANAGER_WORKSPACE: ['Tag Manager Workspaces', 'Tag Manager Workspace'],
|
|
||||||
TARGET_USER: ['Target Users', 'Target User'],
|
|
||||||
TASK: ['Tasks', 'Task'],
|
|
||||||
TASKLIST: ['Tasklists', 'Tasklist'],
|
|
||||||
TEACHER: ['Teachers', 'Teacher'],
|
|
||||||
THREAD: ['Threads', 'Thread'],
|
|
||||||
TRANSFER_APPLICATION: ['Transfer Applications', 'Transfer Application'],
|
|
||||||
TRANSFER_ID: ['Transfer IDs', 'Transfer ID'],
|
|
||||||
TRANSFER_REQUEST: ['Transfer Requests', 'Transfer Request'],
|
|
||||||
TRASHED_EVENT: ['Trashed Events', 'Trashed Event'],
|
|
||||||
TRUSTED_APPLICATION: ['Trusted Applications', 'Trusted Application'],
|
|
||||||
TYPE: ['Types', 'Type'],
|
|
||||||
UNICODE_ENCODING_ENABLED: ['UTF-8 Encoding Enabled', 'UTF-8 Encoding Enabled'],
|
|
||||||
UNIQUE_ID: ['Unique IDs', 'Unique ID'],
|
|
||||||
URL: ['URLs', 'URL'],
|
|
||||||
USER: ['Users', 'User'],
|
|
||||||
USER_ALIAS: ['User Aliases', 'User Alias'],
|
|
||||||
USER_NOT_ARCHIVED: ['Users (Not archived)', 'User (Not archived)'],
|
|
||||||
USER_ARCHIVED: ['Users (Archived)', 'User (Archived)'],
|
|
||||||
USER_EMAIL: ['User Emails', 'User Email'],
|
|
||||||
USER_INVITATION: ['User Invitations', 'User Invitation'],
|
|
||||||
USER_NOT_SUSPENDED: ['Users (Not suspended)', 'User (Not suspended)'],
|
|
||||||
USER_SUSPENDED: ['Users (Suspended)', 'User (Suspended)'],
|
|
||||||
USER_SCHEMA: ['Schemas', 'Schema'],
|
|
||||||
VACATION: ['Vacation', 'Vacation'],
|
|
||||||
VACATION_ENABLED: ['Vacation Enabled', 'Vacation Enabled'],
|
|
||||||
VALUE: ['Values', 'Value'],
|
|
||||||
VAULT_EXPORT: ['Vault Exports', 'Vault Export'],
|
|
||||||
VAULT_HOLD: ['Vault Holds', 'Vault Hold'],
|
|
||||||
VAULT_MATTER: ['Vault Matters', 'Vault Matter'],
|
|
||||||
VAULT_MATTER_ARTIFACT: ['Vault Matter Artifacts', 'Vault Matter Artifact'],
|
|
||||||
VAULT_MATTER_ID: ['Vault Matter IDs', 'Vault Matter ID'],
|
|
||||||
VAULT_OPERATION: ['Vault Operations', 'Vault Operation'],
|
|
||||||
VAULT_QUERY: ['Vault Queries', 'Vault Query'],
|
|
||||||
WEBCLIPS_ENABLED: ['Web Clips Enabled', 'Web Clips Enabled'],
|
|
||||||
WEB_MASTERSITE: ['Web Master Sites', 'Web Master Site'],
|
|
||||||
WEB_RESOURCE: ['Web Resources', 'Web Resource'],
|
|
||||||
YOUTUBE_CHANNEL: ['YouTube Channels', 'YouTube Channel'],
|
|
||||||
ROLE_MANAGER: ['Managers', 'Manager'],
|
|
||||||
ROLE_MEMBER: ['Members', 'Member'],
|
|
||||||
ROLE_OWNER: ['Owners', 'Owner'],
|
|
||||||
ROLE_ALL: ['Members, Managers, Owners', 'Member, Manager, Owner'],
|
|
||||||
ROLE_USER: ['Users', 'User'],
|
|
||||||
ROLE_MANAGER_MEMBER: ['Members, Managers', 'Member, Manager'],
|
|
||||||
ROLE_MANAGER_OWNER: ['Managers, Owners', 'Manager, Owner'],
|
|
||||||
ROLE_MEMBER_OWNER: ['Members, Owners', 'Member, Owner'],
|
|
||||||
ROLE_MANAGER_MEMBER_OWNER: ['Members, Managers, Owners', 'Member, Manager, Owner'],
|
|
||||||
ROLE_PUBLIC: ['Public', 'Public'],
|
|
||||||
}
|
|
||||||
|
|
||||||
# Shared state across all instances (class-level)
|
|
||||||
_entityType = None
|
|
||||||
_forWhom = None
|
|
||||||
_preQualifier = ''
|
|
||||||
_postQualifier = ''
|
|
||||||
|
|
||||||
@property
|
|
||||||
def entityType(self):
|
|
||||||
return GamEntity._entityType
|
|
||||||
@entityType.setter
|
|
||||||
def entityType(self, value):
|
|
||||||
GamEntity._entityType = value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def forWhom(self):
|
|
||||||
return GamEntity._forWhom
|
|
||||||
@forWhom.setter
|
|
||||||
def forWhom(self, value):
|
|
||||||
GamEntity._forWhom = value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def preQualifier(self):
|
|
||||||
return GamEntity._preQualifier
|
|
||||||
@preQualifier.setter
|
|
||||||
def preQualifier(self, value):
|
|
||||||
GamEntity._preQualifier = value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def postQualifier(self):
|
|
||||||
return GamEntity._postQualifier
|
|
||||||
@postQualifier.setter
|
|
||||||
def postQualifier(self, value):
|
|
||||||
GamEntity._postQualifier = value
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
pass # state is shared at class level
|
|
||||||
|
|
||||||
def SetGetting(self, entityType):
|
|
||||||
GamEntity._entityType = entityType
|
|
||||||
GamEntity._preQualifier = GamEntity._postQualifier = ''
|
|
||||||
|
|
||||||
def SetGettingQuery(self, entityType, query):
|
|
||||||
GamEntity._entityType = entityType
|
|
||||||
GamEntity._preQualifier = f' that match query ({query})'
|
|
||||||
GamEntity._postQualifier = f' that matched query ({query})'
|
|
||||||
|
|
||||||
def SetGettingQualifier(self, entityType, qualifier):
|
|
||||||
GamEntity._entityType = entityType
|
|
||||||
GamEntity._preQualifier = GamEntity._postQualifier = qualifier
|
|
||||||
|
|
||||||
def Getting(self):
|
|
||||||
return GamEntity._entityType
|
|
||||||
|
|
||||||
def GettingPreQualifier(self):
|
|
||||||
return GamEntity._preQualifier
|
|
||||||
|
|
||||||
def GettingPostQualifier(self):
|
|
||||||
return GamEntity._postQualifier
|
|
||||||
|
|
||||||
def SetGettingForWhom(self, forWhom):
|
|
||||||
GamEntity._forWhom = forWhom
|
|
||||||
|
|
||||||
def GettingForWhom(self):
|
|
||||||
return GamEntity._forWhom
|
|
||||||
|
|
||||||
def Choose(self, entityType, count):
|
|
||||||
return self._NAMES[entityType][[0, 1][count == 1]]
|
|
||||||
|
|
||||||
def ChooseGetting(self, count):
|
|
||||||
return self._NAMES[self.entityType][[0, 1][count == 1]]
|
|
||||||
|
|
||||||
def Plural(self, entityType):
|
|
||||||
return self._NAMES[entityType][0]
|
|
||||||
|
|
||||||
def PluralGetting(self):
|
|
||||||
return self._NAMES[GamEntity._entityType][0]
|
|
||||||
|
|
||||||
def Singular(self, entityType):
|
|
||||||
return self._NAMES[entityType][1]
|
|
||||||
|
|
||||||
def SingularGetting(self):
|
|
||||||
return self._NAMES[GamEntity._entityType][1]
|
|
||||||
|
|
||||||
def MayTakeTime(self, entityType):
|
|
||||||
if entityType:
|
|
||||||
return f', may take some time on a large {self.Singular(entityType)}...'
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def FormatEntityValueList(self, entityValueList):
|
|
||||||
evList = []
|
|
||||||
for j in range(0, len(entityValueList), 2):
|
|
||||||
evList.append(self.Singular(entityValueList[j]))
|
|
||||||
evList.append(entityValueList[j+1])
|
|
||||||
return evList
|
|
||||||
|
|
||||||
def TypeMessage(self, entityType, message):
|
|
||||||
return f'{self.Singular(entityType)}: {message}'
|
|
||||||
|
|
||||||
def TypeName(self, entityType, entityName):
|
|
||||||
return f'{self.Singular(entityType)}: {entityName}'
|
|
||||||
|
|
||||||
def TypeNameMessage(self, entityType, entityName, message):
|
|
||||||
return f'{self.Singular(entityType)}: {entityName} {message}'
|
|
||||||
@@ -1,866 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM GAPI resources
|
|
||||||
|
|
||||||
"""
|
|
||||||
# callGAPI throw reasons
|
|
||||||
ABORTED = 'aborted'
|
|
||||||
ABUSIVE_CONTENT_RESTRICTION = 'abusiveContentRestriction'
|
|
||||||
ACCESS_NOT_CONFIGURED = 'accessNotConfigured'
|
|
||||||
ADMIN_CANNOT_UNSUSPEND = 'adminCannotUnsuspend'
|
|
||||||
ALREADY_EXISTS = 'alreadyExists'
|
|
||||||
APPLY_LABEL_FORBIDDEN = 'applyLabelForbidden'
|
|
||||||
AUTH_ERROR = 'authError'
|
|
||||||
BACKEND_ERROR = 'backendError'
|
|
||||||
BAD_GATEWAY = 'badGateway'
|
|
||||||
BAD_REQUEST = 'badRequest'
|
|
||||||
CANNOT_ADD_PARENT = 'cannotAddParent'
|
|
||||||
CANNOT_CHANGE_ORGANIZER = 'cannotChangeOrganizer'
|
|
||||||
CANNOT_CHANGE_ORGANIZER_OF_INSTANCE = 'cannotChangeOrganizerOfInstance'
|
|
||||||
CANNOT_CHANGE_OWN_ACL = 'cannotChangeOwnAcl'
|
|
||||||
CANNOT_CHANGE_OWNER_ACL = 'cannotChangeOwnerAcl'
|
|
||||||
CANNOT_CHANGE_OWN_PRIMARY_SUBSCRIPTION = 'cannotChangeOwnPrimarySubscription'
|
|
||||||
CANNOT_COPY_FILE = 'cannotCopyFile'
|
|
||||||
CANNOT_DELETE_ONLY_REVISION = 'cannotDeleteOnlyRevision'
|
|
||||||
CANNOT_DELETE_PERMISSION = 'cannotDeletePermission'
|
|
||||||
CANNOT_DELETE_PRIMARY_CALENDAR = 'cannotDeletePrimaryCalendar'
|
|
||||||
CANNOT_DELETE_PRIMARY_SENDAS = 'cannotDeletePrimarySendAs'
|
|
||||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN = 'cannotDeleteResourceWithChildren'
|
|
||||||
CANNOT_MODIFY_ACL_OF_CALENDAR_OWNER = 'cannotModifyAclOfCalendarOwner'
|
|
||||||
CANNOT_MODIFY_INHERITED_PERMISSION = 'cannotModifyInheritedPermission'
|
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION = 'cannotModifyInheritedTeamDrivePermission'
|
|
||||||
CANNOT_MODIFY_RESTRICTED_LABEL = 'cannotModifyRestrictedLabel'
|
|
||||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT = 'cannotModifyViewersCanCopyContent'
|
|
||||||
CANNOT_MOVE_TRASHED_ITEM_INTO_TEAMDRIVE = 'cannotMoveTrashedItemIntoTeamDrive'
|
|
||||||
CANNOT_MOVE_TRASHED_ITEM_OUT_OF_TEAMDRIVE = 'cannotMoveTrashedItemOutOfTeamDrive'
|
|
||||||
CANNOT_REMOVE_OWNER = 'cannotRemoveOwner'
|
|
||||||
CANNOT_SET_EXPIRATION = 'cannotSetExpiration'
|
|
||||||
CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN = 'cannotSetExpirationOnAnyoneOrDomain'
|
|
||||||
CANNOT_SHARE_GROUPS_WITHLINK = 'cannotShareGroupsWithLink'
|
|
||||||
CANNOT_SHARE_USERS_WITHLINK = 'cannotShareUsersWithLink'
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS = 'cannotShareTeamDriveTopFolderWithAnyoneOrDomains'
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_WITH_NONGOOGLE_ACCOUNTS = 'cannotShareTeamDriveWithNonGoogleAccounts'
|
|
||||||
CANNOT_UNSUBSCRIBE_FROM_OWNED_CALENDAR = 'cannotUnsubscribeFromOwnedCalendar'
|
|
||||||
CANNOT_UPDATE_PERMISSION = 'cannotUpdatePermission'
|
|
||||||
CONDITION_NOT_MET = 'conditionNotMet'
|
|
||||||
CONFLICT = 'conflict'
|
|
||||||
CONTENT_OWNER_ACCOUNT_NOT_FOUND = 'contentOwnerAccountNotFound'
|
|
||||||
CROSS_DOMAIN_MOVE_RESTRICTION = 'crossDomainMoveRestriction'
|
|
||||||
CUSTOMER_EXCEEDED_ROLE_ASSIGNMENTS_LIMIT = 'CUSTOMER_EXCEEDED_ROLE_ASSIGNMENTS_LIMIT'
|
|
||||||
CUSTOMER_NOT_FOUND = 'customerNotFound'
|
|
||||||
CYCLIC_MEMBERSHIPS_NOT_ALLOWED = 'cyclicMembershipsNotAllowed'
|
|
||||||
DAILY_LIMIT_EXCEEDED = 'dailyLimitExceeded'
|
|
||||||
DELETED = 'deleted'
|
|
||||||
DELETED_USER_NOT_FOUND = 'deletedUserNotFound'
|
|
||||||
DOMAIN_ALIAS_NOT_FOUND = 'domainAliasNotFound'
|
|
||||||
DOMAIN_CANNOT_USE_APIS = 'domainCannotUseApis'
|
|
||||||
DOMAIN_NOT_FOUND = 'domainNotFound'
|
|
||||||
DOMAIN_NOT_VERIFIED_SECONDARY = 'domainNotVerifiedSecondary'
|
|
||||||
DOMAIN_POLICY = 'domainPolicy'
|
|
||||||
DOWNLOAD_QUOTA_EXCEEDED = 'downloadQuotaExceeded'
|
|
||||||
DUPLICATE = 'duplicate'
|
|
||||||
EVENT_DURATION_EXCEEDS_LIMIT = 'eventDurationExceedsLimit'
|
|
||||||
EVENT_TYPE_RESTRICTION = 'eventTypeRestriction'
|
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE = 'expirationDatesMustBeInTheFuture'
|
|
||||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS = 'expirationDateNotAllowedForSharedDriveMembers'
|
|
||||||
FAILED_PRECONDITION = 'failedPrecondition'
|
|
||||||
FIELD_IN_USE = 'fieldInUse'
|
|
||||||
FIELD_NOT_WRITABLE = 'fieldNotWritable'
|
|
||||||
FILE_NEVER_WRITABLE = 'fileNeverWritable'
|
|
||||||
FILE_NOT_FOUND = 'fileNotFound'
|
|
||||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE = 'fileOrganizerNotYetEnabledForThisTeamDrive'
|
|
||||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY = 'fileOrganizerOnFoldersInSharedDriveOnly'
|
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED = 'fileOrganizerOnNonTeamDriveNotSupported'
|
|
||||||
FILE_OWNER_NOT_MEMBER_OF_TEAMDRIVE = 'fileOwnerNotMemberOfTeamDrive'
|
|
||||||
FILE_OWNER_NOT_MEMBER_OF_WRITER_DOMAIN = 'fileOwnerNotMemberOfWriterDomain'
|
|
||||||
FILE_WRITER_TEAMDRIVE_MOVE_IN_DISABLED = 'fileWriterTeamDriveMoveInDisabled'
|
|
||||||
FORBIDDEN = 'forbidden'
|
|
||||||
GATEWAY_TIMEOUT = 'gatewayTimeout'
|
|
||||||
GROUP_NOT_FOUND = 'groupNotFound'
|
|
||||||
ILLEGAL_ACCESS_ROLE_FOR_DEFAULT = 'illegalAccessRoleForDefault'
|
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES = 'insufficientAdministratorPrivileges'
|
|
||||||
INSUFFICIENT_ARCHIVED_USER_LICENSES = 'insufficientArchivedUserLicenses'
|
|
||||||
INSUFFICIENT_FILE_PERMISSIONS = 'insufficientFilePermissions'
|
|
||||||
INSUFFICIENT_PARENT_PERMISSIONS = 'insufficientParentPermissions'
|
|
||||||
INSUFFICIENT_PERMISSIONS = 'insufficientPermissions'
|
|
||||||
INTERNAL_ERROR = 'internalError'
|
|
||||||
INVALID = 'invalid'
|
|
||||||
INVALID_ARGUMENT = 'invalidArgument'
|
|
||||||
INVALID_ATTRIBUTE_VALUE = 'invalidAttributeValue'
|
|
||||||
INVALID_CUSTOMER_ID = 'invalidCustomerId'
|
|
||||||
INVALID_INPUT = 'invalidInput'
|
|
||||||
INVALID_LINK_VISIBILITY = 'invalidLinkVisibility'
|
|
||||||
INVALID_MEMBER = 'invalidMember'
|
|
||||||
INVALID_MESSAGE_ID = 'invalidMessageId'
|
|
||||||
INVALID_ORGUNIT = 'invalidOrgunit'
|
|
||||||
INVALID_ORGUNIT_NAME = 'invalidOrgunitName'
|
|
||||||
INVALID_OWNERSHIP_TRANSFER = 'invalidOwnershipTransfer'
|
|
||||||
INVALID_PARAMETER = 'invalidParameter'
|
|
||||||
INVALID_PARENT_ORGUNIT = 'invalidParentOrgunit'
|
|
||||||
INVALID_QUERY = 'invalidQuery'
|
|
||||||
INVALID_RESOURCE = 'invalidResource'
|
|
||||||
INVALID_SCHEMA_VALUE = 'invalidSchemaValue'
|
|
||||||
INVALID_SCOPE_VALUE = 'invalidScopeValue'
|
|
||||||
INVALID_SHARING_REQUEST = 'invalidSharingRequest'
|
|
||||||
LABEL_MULTIPLE_VALUES_FOR_SINGULAR_FIELD = 'labelMultipleValuesForSingularField'
|
|
||||||
LABEL_MUTATION_FORBIDDEN = 'labelMutationForbidden'
|
|
||||||
LABEL_MUTATION_ILLEGAL_SELECTION = 'labelMutationIllegalSelection'
|
|
||||||
LABEL_MUTATION_UNKNOWN_FIELD = 'labelMutationUnknownField'
|
|
||||||
LIMIT_EXCEEDED = 'limitExceeded'
|
|
||||||
LOGIN_REQUIRED = 'loginRequired'
|
|
||||||
MALFORMED_WORKING_LOCATION_EVENT = 'malformedWorkingLocationEvent'
|
|
||||||
MEMBER_NOT_FOUND = 'memberNotFound'
|
|
||||||
MYDRIVE_HIERARCHY_DEPTH_LIMIT_EXCEEDED = 'myDriveHierarchyDepthLimitExceeded'
|
|
||||||
NO_LIST_TEAMDRIVES_ADMINISTRATOR_PRIVILEGE = 'noListTeamDrivesAdministratorPrivilege'
|
|
||||||
NO_MANAGE_TEAMDRIVE_ADMINISTRATOR_PRIVILEGE = 'noManageTeamDriveAdministratorPrivilege'
|
|
||||||
NOT_A_CALENDAR_USER = 'notACalendarUser'
|
|
||||||
NOT_FOUND = 'notFound'
|
|
||||||
NOT_IMPLEMENTED = 'notImplemented'
|
|
||||||
NUM_CHILDREN_IN_NON_ROOT_LIMIT_EXCEEDED = 'numChildrenInNonRootLimitExceeded'
|
|
||||||
OPERATION_NOT_SUPPORTED = 'operationNotSupported'
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED = 'organizerOnNonTeamDriveNotSupported'
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'organizerOnNonTeamDriveItemNotSupported'
|
|
||||||
ORGUNIT_NOT_FOUND = 'orgunitNotFound'
|
|
||||||
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS = 'outsideDomainMemberCannotChangeTeamDriveRestrictions'
|
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED = 'ownerOnTeamDriveItemNotSupported'
|
|
||||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED = 'ownershipChangeAcrossDomainNotPermitted'
|
|
||||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE = 'participantIsNeitherOrganizerNorAttendee'
|
|
||||||
PERMISSION_DENIED = 'permissionDenied'
|
|
||||||
PERMISSION_NOT_FOUND = 'permissionNotFound'
|
|
||||||
PHOTO_NOT_FOUND = 'photoNotFound'
|
|
||||||
PUBLISH_OUT_NOT_PERMITTED = 'publishOutNotPermitted'
|
|
||||||
QUERY_REQUIRES_ADMIN_CREDENTIALS = 'queryRequiresAdminCredentials'
|
|
||||||
QUOTA_EXCEEDED = 'quotaExceeded'
|
|
||||||
RATE_LIMIT_EXCEEDED = 'rateLimitExceeded'
|
|
||||||
REQUIRED = 'required'
|
|
||||||
REQUIRED_ACCESS_LEVEL = 'requiredAccessLevel'
|
|
||||||
RESOURCE_EXHAUSTED = 'resourceExhausted'
|
|
||||||
RESOURCE_ID_NOT_FOUND = 'resourceIdNotFound'
|
|
||||||
RESOURCE_NOT_FOUND = 'resourceNotFound'
|
|
||||||
RESPONSE_PREPARATION_FAILURE = 'responsePreparationFailure'
|
|
||||||
REVISION_DELETION_NOT_SUPPORTED = 'revisionDeletionNotSupported'
|
|
||||||
REVISION_NOT_FOUND = 'revisionNotFound'
|
|
||||||
REVISIONS_NOT_SUPPORTED = 'revisionsNotSupported'
|
|
||||||
SERVICE_LIMIT = 'serviceLimit'
|
|
||||||
SERVICE_NOT_AVAILABLE = 'serviceNotAvailable'
|
|
||||||
SHARE_IN_NOT_PERMITTED = 'shareInNotPermitted'
|
|
||||||
SHARE_OUT_NOT_PERMITTED = 'shareOutNotPermitted'
|
|
||||||
SHARE_OUT_NOT_PERMITTED_TO_USER = 'shareOutNotPermittedToUser'
|
|
||||||
SHARE_OUT_WARNING = 'shareOutWarning'
|
|
||||||
SHARING_RATE_LIMIT_EXCEEDED = 'sharingRateLimitExceeded'
|
|
||||||
SHORTCUT_TARGET_INVALID = 'shortcutTargetInvalid'
|
|
||||||
STORAGE_QUOTA_EXCEEDED = 'storageQuotaExceeded'
|
|
||||||
SYSTEM_ERROR = 'systemError'
|
|
||||||
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION = 'targetUserRoleLimitedByLicenseRestriction'
|
|
||||||
TEAMDRIVE_ALREADY_EXISTS = 'teamDriveAlreadyExists'
|
|
||||||
TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION = 'teamDriveDomainUsersOnlyRestriction'
|
|
||||||
TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION = 'teamDriveTeamMembersOnlyRestriction'
|
|
||||||
TEAMDRIVE_FILE_LIMIT_EXCEEDED = 'teamDriveFileLimitExceeded'
|
|
||||||
TEAMDRIVE_HIERARCHY_TOO_DEEP = 'teamDriveHierarchyTooDeep'
|
|
||||||
TEAMDRIVE_MEMBERSHIP_REQUIRED = 'teamDriveMembershipRequired'
|
|
||||||
TEAMDRIVES_FOLDER_MOVE_IN_NOT_SUPPORTED = 'teamDrivesFolderMoveInNotSupported'
|
|
||||||
TEAMDRIVES_FOLDER_SHARING_NOT_SUPPORTED = 'teamDrivesFolderSharingNotSupported'
|
|
||||||
TEAMDRIVES_PARENT_LIMIT = 'teamDrivesParentLimit'
|
|
||||||
TEAMDRIVES_SHARING_RESTRICTION_NOT_ALLOWED = 'teamDrivesSharingRestrictionNotAllowed'
|
|
||||||
TEAMDRIVES_SHORTCUT_FILE_NOT_SUPPORTED = 'teamDrivesShortcutFileNotSupported'
|
|
||||||
TIME_RANGE_EMPTY = 'timeRangeEmpty'
|
|
||||||
TRANSIENT_ERROR = 'transientError'
|
|
||||||
UNIMPLEMENTED_ERROR = 'unimplementedError'
|
|
||||||
UNKNOWN_ERROR = 'unknownError'
|
|
||||||
UNSUPPORTED_LANGUAGE_CODE = 'unsupportedLanguageCode'
|
|
||||||
UNSUPPORTED_SUPERVISED_ACCOUNT = 'unsupportedSupervisedAccount'
|
|
||||||
UPLOAD_TOO_LARGE = 'uploadTooLarge'
|
|
||||||
USER_CANNOT_CREATE_TEAMDRIVES = 'userCannotCreateTeamDrives'
|
|
||||||
USER_ACCESS = 'userAccess'
|
|
||||||
USER_NOT_FOUND = 'userNotFound'
|
|
||||||
USER_RATE_LIMIT_EXCEEDED = 'userRateLimitExceeded'
|
|
||||||
#
|
|
||||||
DEFAULT_RETRY_REASONS = [QUOTA_EXCEEDED, RATE_LIMIT_EXCEEDED, SHARING_RATE_LIMIT_EXCEEDED, USER_RATE_LIMIT_EXCEEDED,
|
|
||||||
BACKEND_ERROR, BAD_GATEWAY, GATEWAY_TIMEOUT, INTERNAL_ERROR, TRANSIENT_ERROR]
|
|
||||||
SERVICE_NOT_AVAILABLE_RETRY_REASONS = [SERVICE_NOT_AVAILABLE]
|
|
||||||
ACTIVITY_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST]
|
|
||||||
ALERT_THROW_REASONS = [SERVICE_NOT_AVAILABLE, AUTH_ERROR, PERMISSION_DENIED]
|
|
||||||
CALENDAR_THROW_REASONS = [SERVICE_NOT_AVAILABLE, AUTH_ERROR, NOT_A_CALENDAR_USER]
|
|
||||||
CIGROUP_CREATE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, ALREADY_EXISTS, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_ARGUMENT, PERMISSION_DENIED, FAILED_PRECONDITION]
|
|
||||||
CIGROUP_GET_THROW_REASONS = [SERVICE_NOT_AVAILABLE, NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, INVALID_ARGUMENT, SYSTEM_ERROR, PERMISSION_DENIED]
|
|
||||||
CIGROUP_LIST_THROW_REASONS = [SERVICE_NOT_AVAILABLE, RESOURCE_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, INVALID_ARGUMENT, SYSTEM_ERROR, PERMISSION_DENIED]
|
|
||||||
CIGROUP_LIST_USERKEY_THROW_REASONS = CIGROUP_LIST_THROW_REASONS+[INVALID_ARGUMENT]
|
|
||||||
CIGROUP_UPDATE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS,
|
|
||||||
FORBIDDEN, BAD_REQUEST, INVALID, INVALID_INPUT, INVALID_ARGUMENT,
|
|
||||||
SYSTEM_ERROR, PERMISSION_DENIED, FAILED_PRECONDITION]
|
|
||||||
CIGROUP_RETRY_REASONS = [INVALID, SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
|
||||||
CIMEMBERS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, MEMBER_NOT_FOUND, INVALID_MEMBER]
|
|
||||||
CISSO_CREATE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FAILED_PRECONDITION, NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_ARGUMENT, PERMISSION_DENIED, INTERNAL_ERROR]
|
|
||||||
CISSO_GET_THROW_REASONS = [SERVICE_NOT_AVAILABLE, NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, SYSTEM_ERROR, PERMISSION_DENIED, INTERNAL_ERROR]
|
|
||||||
CISSO_LIST_THROW_REASONS = [SERVICE_NOT_AVAILABLE, NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, SYSTEM_ERROR, PERMISSION_DENIED, INTERNAL_ERROR]
|
|
||||||
CISSO_UPDATE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, NOT_FOUND, FAILED_PRECONDITION, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS,
|
|
||||||
FORBIDDEN, BAD_REQUEST, INVALID, INVALID_INPUT, INVALID_ARGUMENT,
|
|
||||||
SYSTEM_ERROR, PERMISSION_DENIED, INTERNAL_ERROR]
|
|
||||||
CONTACT_DELEGATE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST, FAILED_PRECONDITION, PERMISSION_DENIED, FORBIDDEN, INVALID_ARGUMENT]
|
|
||||||
COURSE_ACCESS_THROW_REASONS = [NOT_FOUND, INSUFFICIENT_PERMISSIONS, PERMISSION_DENIED, FORBIDDEN, INVALID_ARGUMENT]
|
|
||||||
DRIVE_USER_THROW_REASONS = [SERVICE_NOT_AVAILABLE, AUTH_ERROR, DOMAIN_POLICY]
|
|
||||||
DRIVE_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS, UNKNOWN_ERROR, INVALID]
|
|
||||||
DRIVE_COPY_THROW_REASONS = DRIVE_ACCESS_THROW_REASONS+[CANNOT_COPY_FILE, BAD_REQUEST, RESPONSE_PREPARATION_FAILURE, TEAMDRIVES_SHARING_RESTRICTION_NOT_ALLOWED,
|
|
||||||
FIELD_NOT_WRITABLE, RATE_LIMIT_EXCEEDED, USER_RATE_LIMIT_EXCEEDED,
|
|
||||||
STORAGE_QUOTA_EXCEEDED, TEAMDRIVE_FILE_LIMIT_EXCEEDED, TEAMDRIVE_HIERARCHY_TOO_DEEP]
|
|
||||||
DRIVE_GET_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, DOWNLOAD_QUOTA_EXCEEDED]
|
|
||||||
DRIVE3_CREATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID, INVALID_SHARING_REQUEST, OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED,
|
|
||||||
CANNOT_SET_EXPIRATION, CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN,
|
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE, EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS,
|
|
||||||
NOT_FOUND, TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION, TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION,
|
|
||||||
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION, INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
||||||
PUBLISH_OUT_NOT_PERMITTED, SHARE_IN_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED_TO_USER,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_WITH_NONGOOGLE_ACCOUNTS,
|
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED,
|
|
||||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE,
|
|
||||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
|
||||||
CANNOT_MODIFY_INHERITED_PERMISSION,
|
|
||||||
TEAMDRIVES_FOLDER_SHARING_NOT_SUPPORTED, INVALID_LINK_VISIBILITY, ABUSIVE_CONTENT_RESTRICTION]
|
|
||||||
DRIVE3_GET_ACL_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
|
||||||
UNKNOWN_ERROR, INVALID]
|
|
||||||
DRIVE3_UPDATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID_OWNERSHIP_TRANSFER, CANNOT_REMOVE_OWNER,
|
|
||||||
CANNOT_SET_EXPIRATION, CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN,
|
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE, EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS,
|
|
||||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED,
|
|
||||||
NOT_FOUND, TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION, TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION,
|
|
||||||
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION, INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
||||||
PUBLISH_OUT_NOT_PERMITTED, SHARE_IN_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED_TO_USER,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_WITH_NONGOOGLE_ACCOUNTS,
|
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED,
|
|
||||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE,
|
|
||||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY,
|
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED,
|
|
||||||
CANNOT_UPDATE_PERMISSION,
|
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
|
||||||
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
|
||||||
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_REMOVE_OWNER,
|
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
||||||
CANNOT_DELETE_PERMISSION, FILE_NEVER_WRITABLE]
|
|
||||||
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
|
||||||
FILE_NEVER_WRITABLE, APPLY_LABEL_FORBIDDEN,
|
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
|
||||||
UNKNOWN_ERROR, INVALID_INPUT, BAD_REQUEST,
|
|
||||||
LABEL_MULTIPLE_VALUES_FOR_SINGULAR_FIELD, LABEL_MUTATION_FORBIDDEN,
|
|
||||||
LABEL_MUTATION_ILLEGAL_SELECTION, LABEL_MUTATION_UNKNOWN_FIELD]
|
|
||||||
DOCS_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[NOT_FOUND, PERMISSION_DENIED, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS,
|
|
||||||
BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
|
|
||||||
GMAIL_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST]
|
|
||||||
GMAIL_LIST_THROW_REASONS = [FAILED_PRECONDITION, PERMISSION_DENIED, INVALID, INVALID_ARGUMENT]
|
|
||||||
GMAIL_SMIME_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST, INVALID_ARGUMENT, FORBIDDEN, NOT_FOUND, PERMISSION_DENIED]
|
|
||||||
GROUP_GET_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, SYSTEM_ERROR]
|
|
||||||
GROUP_GET_RETRY_REASONS = [INVALID, SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
|
||||||
GROUP_CREATE_THROW_REASONS = [DUPLICATE, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT, RESOURCE_NOT_FOUND]
|
|
||||||
GROUP_UPDATE_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT]
|
|
||||||
GROUP_SETTINGS_THROW_REASONS = [NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, SYSTEM_ERROR, PERMISSION_DENIED,
|
|
||||||
INVALID, INVALID_ARGUMENT, INVALID_PARAMETER, INVALID_ATTRIBUTE_VALUE, INVALID_INPUT,
|
|
||||||
SERVICE_LIMIT, SERVICE_NOT_AVAILABLE, AUTH_ERROR, REQUIRED]
|
|
||||||
GROUP_SETTINGS_RETRY_REASONS = [INVALID, SERVICE_LIMIT, SERVICE_NOT_AVAILABLE]
|
|
||||||
GROUP_LIST_THROW_REASONS = [RESOURCE_NOT_FOUND, DOMAIN_NOT_FOUND, FORBIDDEN, BAD_REQUEST, PERMISSION_DENIED]
|
|
||||||
GROUP_LIST_USERKEY_THROW_REASONS = GROUP_LIST_THROW_REASONS+[INVALID_MEMBER, INVALID_INPUT]
|
|
||||||
KEEP_THROW_REASONS = [AUTH_ERROR, BAD_REQUEST, PERMISSION_DENIED, INVALID_ARGUMENT, NOT_FOUND]
|
|
||||||
LOOKERSTUDIO_THROW_REASONS = [INVALID_ARGUMENT, SERVICE_NOT_AVAILABLE, BAD_REQUEST, NOT_FOUND, PERMISSION_DENIED, INTERNAL_ERROR]
|
|
||||||
MEMBERS_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, INVALID, FORBIDDEN, SERVICE_NOT_AVAILABLE, PERMISSION_DENIED]
|
|
||||||
MEMBERS_RETRY_REASONS = [SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
|
||||||
ORGUNIT_GET_THROW_REASONS = [INVALID_ORGUNIT, ORGUNIT_NOT_FOUND, BACKEND_ERROR, BAD_REQUEST, INVALID_CUSTOMER_ID, LOGIN_REQUIRED]
|
|
||||||
PEOPLE_ACCESS_THROW_REASONS = [SERVICE_NOT_AVAILABLE, FORBIDDEN, PERMISSION_DENIED, FAILED_PRECONDITION]
|
|
||||||
RESELLER_THROW_REASONS = [BAD_REQUEST, RESOURCE_NOT_FOUND, FORBIDDEN, INVALID]
|
|
||||||
SHEETS_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[NOT_FOUND, PERMISSION_DENIED, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS,
|
|
||||||
BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
|
|
||||||
TAGMANAGER_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
|
||||||
TASK_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
|
||||||
TASKLIST_THROW_REASONS = [BAD_REQUEST, PERMISSION_DENIED, INVALID, NOT_FOUND, ACCESS_NOT_CONFIGURED]
|
|
||||||
USER_GET_THROW_REASONS = [USER_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, SYSTEM_ERROR]
|
|
||||||
YOUTUBE_THROW_REASONS = [SERVICE_NOT_AVAILABLE, AUTH_ERROR, UNSUPPORTED_SUPERVISED_ACCOUNT, UNSUPPORTED_LANGUAGE_CODE, CONTENT_OWNER_ACCOUNT_NOT_FOUND]
|
|
||||||
|
|
||||||
REASON_MESSAGE_MAP = {
|
|
||||||
ABORTED: [
|
|
||||||
('Label name exists or conflicts', DUPLICATE),
|
|
||||||
('The operation was aborted', ABORTED),
|
|
||||||
],
|
|
||||||
CONDITION_NOT_MET: [
|
|
||||||
('Cyclic memberships not allowed', CYCLIC_MEMBERSHIPS_NOT_ALLOWED),
|
|
||||||
('undelete', DELETED_USER_NOT_FOUND),
|
|
||||||
],
|
|
||||||
FAILED_PRECONDITION: [
|
|
||||||
('Bad Request', BAD_REQUEST),
|
|
||||||
('Mail service not enabled', SERVICE_NOT_AVAILABLE),
|
|
||||||
],
|
|
||||||
INVALID: [
|
|
||||||
('userId', USER_NOT_FOUND),
|
|
||||||
('memberKey', INVALID_MEMBER),
|
|
||||||
('A system error has occurred', SYSTEM_ERROR),
|
|
||||||
('Expiration dates must be in the future', EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE),
|
|
||||||
('Invalid attribute value', INVALID_ATTRIBUTE_VALUE),
|
|
||||||
('Invalid Customer Id', INVALID_CUSTOMER_ID),
|
|
||||||
('Invalid Input: INVALID_OU_ID', INVALID_ORGUNIT),
|
|
||||||
('Invalid Input: custom_schema', INVALID_SCHEMA_VALUE),
|
|
||||||
('Invalid Input: groupKey', INVALID_INPUT),
|
|
||||||
('Invalid Input: resource', INVALID_RESOURCE),
|
|
||||||
('Invalid Input:', INVALID_INPUT),
|
|
||||||
('Invalid Input', INVALID_INPUT),
|
|
||||||
('Invalid Org Unit', INVALID_ORGUNIT),
|
|
||||||
('Invalid Ou Id', INVALID_ORGUNIT),
|
|
||||||
('Invalid Ou Name', INVALID_ORGUNIT_NAME),
|
|
||||||
('Invalid Parent Orgunit Id', INVALID_PARENT_ORGUNIT),
|
|
||||||
('Invalid query', INVALID_QUERY),
|
|
||||||
('Invalid scope value', INVALID_SCOPE_VALUE),
|
|
||||||
('Invalid value', INVALID_INPUT),
|
|
||||||
('New domain name is not a verified secondary domain', DOMAIN_NOT_VERIFIED_SECONDARY),
|
|
||||||
('PermissionDenied', PERMISSION_DENIED),
|
|
||||||
],
|
|
||||||
INVALID_ARGUMENT: [
|
|
||||||
('Cannot delete primary send-as', CANNOT_DELETE_PRIMARY_SENDAS),
|
|
||||||
('Invalid id value', INVALID_MESSAGE_ID),
|
|
||||||
('Invalid ids value', INVALID_MESSAGE_ID),
|
|
||||||
],
|
|
||||||
NOT_FOUND: [
|
|
||||||
('userKey', USER_NOT_FOUND),
|
|
||||||
('groupKey', GROUP_NOT_FOUND),
|
|
||||||
('memberKey', MEMBER_NOT_FOUND),
|
|
||||||
('photo', PHOTO_NOT_FOUND),
|
|
||||||
('resource_id', RESOURCE_ID_NOT_FOUND),
|
|
||||||
('resourceId', RESOURCE_ID_NOT_FOUND),
|
|
||||||
('Customer doesn\'t exist', CUSTOMER_NOT_FOUND),
|
|
||||||
('Domain alias does not exist', DOMAIN_ALIAS_NOT_FOUND),
|
|
||||||
('Domain not found', DOMAIN_NOT_FOUND),
|
|
||||||
('domain', DOMAIN_NOT_FOUND),
|
|
||||||
('File not found', FILE_NOT_FOUND),
|
|
||||||
('Org unit not found', ORGUNIT_NOT_FOUND),
|
|
||||||
('Permission not found', PERMISSION_NOT_FOUND),
|
|
||||||
('Resource Not Found', RESOURCE_NOT_FOUND),
|
|
||||||
('Revision not found', REVISION_NOT_FOUND),
|
|
||||||
('Shared Drive not found', NOT_FOUND),
|
|
||||||
('Not Found', NOT_FOUND),
|
|
||||||
],
|
|
||||||
REQUIRED: [
|
|
||||||
('Login Required', LOGIN_REQUIRED),
|
|
||||||
('memberKey', MEMBER_NOT_FOUND),
|
|
||||||
],
|
|
||||||
RESOURCE_NOT_FOUND: [
|
|
||||||
('resourceId', RESOURCE_ID_NOT_FOUND),
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
class aborted(Exception):
|
|
||||||
pass
|
|
||||||
class abusiveContentRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class accessNotConfigured(Exception):
|
|
||||||
pass
|
|
||||||
class adminCannotUnsuspend(Exception):
|
|
||||||
pass
|
|
||||||
class alreadyExists(Exception):
|
|
||||||
pass
|
|
||||||
class applyLabelForbidden(Exception):
|
|
||||||
pass
|
|
||||||
class authError(Exception):
|
|
||||||
pass
|
|
||||||
class backendError(Exception):
|
|
||||||
pass
|
|
||||||
class badRequest(Exception):
|
|
||||||
pass
|
|
||||||
class cannotAddParent(Exception):
|
|
||||||
pass
|
|
||||||
class cannotChangeOrganizer(Exception):
|
|
||||||
pass
|
|
||||||
class cannotChangeOrganizerOfInstance(Exception):
|
|
||||||
pass
|
|
||||||
class cannotChangeOwnAcl(Exception):
|
|
||||||
pass
|
|
||||||
class cannotChangeOwnerAcl(Exception):
|
|
||||||
pass
|
|
||||||
class cannotChangeOwnPrimarySubscription(Exception):
|
|
||||||
pass
|
|
||||||
class cannotCopyFile(Exception):
|
|
||||||
pass
|
|
||||||
class cannotDeleteOnlyRevision(Exception):
|
|
||||||
pass
|
|
||||||
class cannotDeletePermission(Exception):
|
|
||||||
pass
|
|
||||||
class cannotDeletePrimaryCalendar(Exception):
|
|
||||||
pass
|
|
||||||
class cannotDeletePrimarySendAs(Exception):
|
|
||||||
pass
|
|
||||||
class cannotDeleteResourceWithChildren(Exception):
|
|
||||||
pass
|
|
||||||
class cannotModifyAclOfCalendarOwner(Exception):
|
|
||||||
pass
|
|
||||||
class cannotModifyInheritedPermission(Exception):
|
|
||||||
pass
|
|
||||||
class cannotModifyInheritedTeamDrivePermission(Exception):
|
|
||||||
pass
|
|
||||||
class cannotModifyRestrictedLabel(Exception):
|
|
||||||
pass
|
|
||||||
class cannotModifyViewersCanCopyContent(Exception):
|
|
||||||
pass
|
|
||||||
class cannotMoveTrashedItemIntoTeamDrive(Exception):
|
|
||||||
pass
|
|
||||||
class cannotMoveTrashedItemOutOfTeamDrive(Exception):
|
|
||||||
pass
|
|
||||||
class cannotRemoveOwner(Exception):
|
|
||||||
pass
|
|
||||||
class cannotSetExpiration(Exception):
|
|
||||||
pass
|
|
||||||
class cannotSetExpirationOnAnyoneOrDomain(Exception):
|
|
||||||
pass
|
|
||||||
class cannotShareGroupsWithLink(Exception):
|
|
||||||
pass
|
|
||||||
class cannotShareUsersWithLink(Exception):
|
|
||||||
pass
|
|
||||||
class cannotShareTeamDriveTopFolderWithAnyoneOrDomains(Exception):
|
|
||||||
pass
|
|
||||||
class cannotShareTeamDriveWithNonGoogleAccounts(Exception):
|
|
||||||
pass
|
|
||||||
class cannotUnsubscribeFromOwnedCalendar(Exception):
|
|
||||||
pass
|
|
||||||
class cannotUpdatePermission(Exception):
|
|
||||||
pass
|
|
||||||
class conditionNotMet(Exception):
|
|
||||||
pass
|
|
||||||
class conflict(Exception):
|
|
||||||
pass
|
|
||||||
class contentOwnerAccountNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class crossDomainMoveRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class customerExceededRoleAssignmentsLimit(Exception):
|
|
||||||
pass
|
|
||||||
class customerNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class cyclicMembershipsNotAllowed(Exception):
|
|
||||||
pass
|
|
||||||
class deleted(Exception):
|
|
||||||
pass
|
|
||||||
class deletedUserNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class domainAliasNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class domainCannotUseApis(Exception):
|
|
||||||
pass
|
|
||||||
class domainNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class domainNotVerifiedSecondary(Exception):
|
|
||||||
pass
|
|
||||||
class domainPolicy(Exception):
|
|
||||||
pass
|
|
||||||
class downloadQuotaExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class duplicate(Exception):
|
|
||||||
pass
|
|
||||||
class eventDurationExceedsLimit(Exception):
|
|
||||||
pass
|
|
||||||
class eventTypeRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class expirationDatesMustBeInTheFuture(Exception):
|
|
||||||
pass
|
|
||||||
class expirationDateNotAllowedForSharedDriveMembers(Exception):
|
|
||||||
pass
|
|
||||||
class failedPrecondition(Exception):
|
|
||||||
pass
|
|
||||||
class fieldInUse(Exception):
|
|
||||||
pass
|
|
||||||
class fieldNotWritable(Exception):
|
|
||||||
pass
|
|
||||||
class fileNeverWritable(Exception):
|
|
||||||
pass
|
|
||||||
class fileNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class fileOrganizerNotYetEnabledForThisTeamDrive(Exception):
|
|
||||||
pass
|
|
||||||
class fileOrganizerOnFoldersInSharedDriveOnly(Exception):
|
|
||||||
pass
|
|
||||||
class fileOrganizerOnNonTeamDriveNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class fileOwnerNotMemberOfTeamDrive(Exception):
|
|
||||||
pass
|
|
||||||
class fileOwnerNotMemberOfWriterDomain(Exception):
|
|
||||||
pass
|
|
||||||
class fileWriterTeamDriveMoveInDisabled(Exception):
|
|
||||||
pass
|
|
||||||
class forbidden(Exception):
|
|
||||||
pass
|
|
||||||
class groupNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class illegalAccessRoleForDefault(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientAdministratorPrivileges(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientArchivedUserLicenses(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientFilePermissions(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientParentPermissions(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientPermissions(Exception):
|
|
||||||
pass
|
|
||||||
class internalError(Exception):
|
|
||||||
pass
|
|
||||||
class invalid(Exception):
|
|
||||||
pass
|
|
||||||
class invalidArgument(Exception):
|
|
||||||
pass
|
|
||||||
class invalidAttributeValue(Exception):
|
|
||||||
pass
|
|
||||||
class invalidCustomerId(Exception):
|
|
||||||
pass
|
|
||||||
class invalidInput(Exception):
|
|
||||||
pass
|
|
||||||
class invalidLinkVisibility(Exception):
|
|
||||||
pass
|
|
||||||
class invalidMember(Exception):
|
|
||||||
pass
|
|
||||||
class invalidMessageId(Exception):
|
|
||||||
pass
|
|
||||||
class invalidOrgunit(Exception):
|
|
||||||
pass
|
|
||||||
class invalidOrgunitName(Exception):
|
|
||||||
pass
|
|
||||||
class invalidOwnershipTransfer(Exception):
|
|
||||||
pass
|
|
||||||
class invalidParameter(Exception):
|
|
||||||
pass
|
|
||||||
class invalidParentOrgunit(Exception):
|
|
||||||
pass
|
|
||||||
class invalidQuery(Exception):
|
|
||||||
pass
|
|
||||||
class invalidResource(Exception):
|
|
||||||
pass
|
|
||||||
class invalidSchemaValue(Exception):
|
|
||||||
pass
|
|
||||||
class invalidScopeValue(Exception):
|
|
||||||
pass
|
|
||||||
class invalidSharingRequest(Exception):
|
|
||||||
pass
|
|
||||||
class labelMultipleValuesForSingularField(Exception):
|
|
||||||
pass
|
|
||||||
class labelMutationForbidden(Exception):
|
|
||||||
pass
|
|
||||||
class labelMutationIllegalSelection(Exception):
|
|
||||||
pass
|
|
||||||
class labelMutationUnknownField(Exception):
|
|
||||||
pass
|
|
||||||
class limitExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class loginRequired(Exception):
|
|
||||||
pass
|
|
||||||
class malformedWorkingLocationEvent(Exception):
|
|
||||||
pass
|
|
||||||
class memberNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class noListTeamDrivesAdministratorPrivilege(Exception):
|
|
||||||
pass
|
|
||||||
class noManageTeamDriveAdministratorPrivilege(Exception):
|
|
||||||
pass
|
|
||||||
class notACalendarUser(Exception):
|
|
||||||
pass
|
|
||||||
class notFound(Exception):
|
|
||||||
pass
|
|
||||||
class notImplemented(Exception):
|
|
||||||
pass
|
|
||||||
class operationNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class organizerOnNonTeamDriveNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class organizerOnNonTeamDriveItemNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class orgunitNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class outsideDomainMemberCannotChangeTeamDriveRestrictions(Exception):
|
|
||||||
pass
|
|
||||||
class ownerOnTeamDriveItemNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class ownershipChangeAcrossDomainNotPermitted(Exception):
|
|
||||||
pass
|
|
||||||
class participantIsNeitherOrganizerNorAttendee(Exception):
|
|
||||||
pass
|
|
||||||
class permissionDenied(Exception):
|
|
||||||
pass
|
|
||||||
class permissionNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class photoNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class publishOutNotPermitted(Exception):
|
|
||||||
pass
|
|
||||||
class queryRequiresAdminCredentials(Exception):
|
|
||||||
pass
|
|
||||||
class quotaExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class rateLimitExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class required(Exception):
|
|
||||||
pass
|
|
||||||
class requiredAccessLevel(Exception):
|
|
||||||
pass
|
|
||||||
class resourceExhausted(Exception):
|
|
||||||
pass
|
|
||||||
class resourceIdNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class resourceNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class responsePreparationFailure(Exception):
|
|
||||||
pass
|
|
||||||
class revisionDeletionNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class revisionNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class revisionsNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class serviceLimit(Exception):
|
|
||||||
pass
|
|
||||||
class serviceNotAvailable(Exception):
|
|
||||||
pass
|
|
||||||
class shareInNotPermitted(Exception):
|
|
||||||
pass
|
|
||||||
class shareOutNotPermitted(Exception):
|
|
||||||
pass
|
|
||||||
class shareOutNotPermittedToUser(Exception):
|
|
||||||
pass
|
|
||||||
class shareOutWarning(Exception):
|
|
||||||
pass
|
|
||||||
class sharingRateLimitExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class shortcutTargetInvalid(Exception):
|
|
||||||
pass
|
|
||||||
class storageQuotaExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class systemError(Exception):
|
|
||||||
pass
|
|
||||||
class targetUserRoleLimitedByLicenseRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveAlreadyExists(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveDomainUsersOnlyRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveTeamMembersOnlyRestriction(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveFileLimitExceeded(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveHierarchyTooDeep(Exception):
|
|
||||||
pass
|
|
||||||
class teamDriveMembershipRequired(Exception):
|
|
||||||
pass
|
|
||||||
class teamDrivesFolderMoveInNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class teamDrivesFolderSharingNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class teamDrivesParentLimit(Exception):
|
|
||||||
pass
|
|
||||||
class teamDrivesSharingRestrictionNotAllowed(Exception):
|
|
||||||
pass
|
|
||||||
class teamDrivesShortcutFileNotSupported(Exception):
|
|
||||||
pass
|
|
||||||
class timeRangeEmpty(Exception):
|
|
||||||
pass
|
|
||||||
class transientError(Exception):
|
|
||||||
pass
|
|
||||||
class unimplementedError(Exception):
|
|
||||||
pass
|
|
||||||
class unknownError(Exception):
|
|
||||||
pass
|
|
||||||
class unsupportedLanguageCode(Exception):
|
|
||||||
pass
|
|
||||||
class unsupportedSupervisedAccount(Exception):
|
|
||||||
pass
|
|
||||||
class uploadTooLarge(Exception):
|
|
||||||
pass
|
|
||||||
class userCannotCreateTeamDrives(Exception):
|
|
||||||
pass
|
|
||||||
class userAccess(Exception):
|
|
||||||
pass
|
|
||||||
class userNotFound(Exception):
|
|
||||||
pass
|
|
||||||
class userRateLimitExceeded(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
REASON_EXCEPTION_MAP = {
|
|
||||||
ABORTED: aborted,
|
|
||||||
ABUSIVE_CONTENT_RESTRICTION: abusiveContentRestriction,
|
|
||||||
ACCESS_NOT_CONFIGURED: accessNotConfigured,
|
|
||||||
ADMIN_CANNOT_UNSUSPEND: adminCannotUnsuspend,
|
|
||||||
ALREADY_EXISTS: alreadyExists,
|
|
||||||
APPLY_LABEL_FORBIDDEN: applyLabelForbidden,
|
|
||||||
AUTH_ERROR: authError,
|
|
||||||
BACKEND_ERROR: backendError,
|
|
||||||
BAD_REQUEST: badRequest,
|
|
||||||
CANNOT_ADD_PARENT: cannotAddParent,
|
|
||||||
CANNOT_CHANGE_ORGANIZER: cannotChangeOrganizer,
|
|
||||||
CANNOT_CHANGE_ORGANIZER_OF_INSTANCE: cannotChangeOrganizerOfInstance,
|
|
||||||
CANNOT_CHANGE_OWN_ACL: cannotChangeOwnAcl,
|
|
||||||
CANNOT_CHANGE_OWNER_ACL: cannotChangeOwnerAcl,
|
|
||||||
CANNOT_CHANGE_OWN_PRIMARY_SUBSCRIPTION: cannotChangeOwnPrimarySubscription,
|
|
||||||
CANNOT_COPY_FILE: cannotCopyFile,
|
|
||||||
CANNOT_DELETE_ONLY_REVISION: cannotDeleteOnlyRevision,
|
|
||||||
CANNOT_DELETE_PERMISSION: cannotDeletePermission,
|
|
||||||
CANNOT_DELETE_PRIMARY_CALENDAR: cannotDeletePrimaryCalendar,
|
|
||||||
CANNOT_DELETE_PRIMARY_SENDAS: cannotDeletePrimarySendAs,
|
|
||||||
CANNOT_DELETE_RESOURCE_WITH_CHILDREN: cannotDeleteResourceWithChildren,
|
|
||||||
CANNOT_MODIFY_ACL_OF_CALENDAR_OWNER: cannotModifyAclOfCalendarOwner,
|
|
||||||
CANNOT_MODIFY_INHERITED_PERMISSION: cannotModifyInheritedPermission,
|
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION: cannotModifyInheritedTeamDrivePermission,
|
|
||||||
CANNOT_MODIFY_RESTRICTED_LABEL: cannotModifyRestrictedLabel,
|
|
||||||
CANNOT_MODIFY_VIEWERS_CAN_COPY_CONTENT: cannotModifyViewersCanCopyContent,
|
|
||||||
CANNOT_MOVE_TRASHED_ITEM_INTO_TEAMDRIVE: cannotMoveTrashedItemIntoTeamDrive,
|
|
||||||
CANNOT_MOVE_TRASHED_ITEM_OUT_OF_TEAMDRIVE: cannotMoveTrashedItemOutOfTeamDrive,
|
|
||||||
CANNOT_REMOVE_OWNER: cannotRemoveOwner,
|
|
||||||
CANNOT_SET_EXPIRATION: cannotSetExpiration,
|
|
||||||
CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN: cannotSetExpirationOnAnyoneOrDomain,
|
|
||||||
CANNOT_SHARE_GROUPS_WITHLINK: cannotShareGroupsWithLink,
|
|
||||||
CANNOT_SHARE_USERS_WITHLINK: cannotShareUsersWithLink,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS: cannotShareTeamDriveTopFolderWithAnyoneOrDomains,
|
|
||||||
CANNOT_SHARE_TEAMDRIVE_WITH_NONGOOGLE_ACCOUNTS: cannotShareTeamDriveWithNonGoogleAccounts,
|
|
||||||
CANNOT_UNSUBSCRIBE_FROM_OWNED_CALENDAR: cannotUnsubscribeFromOwnedCalendar,
|
|
||||||
CANNOT_UPDATE_PERMISSION: cannotUpdatePermission,
|
|
||||||
CONDITION_NOT_MET: conditionNotMet,
|
|
||||||
CONFLICT: conflict,
|
|
||||||
CONTENT_OWNER_ACCOUNT_NOT_FOUND: contentOwnerAccountNotFound,
|
|
||||||
CROSS_DOMAIN_MOVE_RESTRICTION: crossDomainMoveRestriction,
|
|
||||||
CUSTOMER_EXCEEDED_ROLE_ASSIGNMENTS_LIMIT: customerExceededRoleAssignmentsLimit,
|
|
||||||
CUSTOMER_NOT_FOUND: customerNotFound,
|
|
||||||
CYCLIC_MEMBERSHIPS_NOT_ALLOWED: cyclicMembershipsNotAllowed,
|
|
||||||
DELETED: deleted,
|
|
||||||
DELETED_USER_NOT_FOUND: deletedUserNotFound,
|
|
||||||
DOMAIN_ALIAS_NOT_FOUND: domainAliasNotFound,
|
|
||||||
DOMAIN_CANNOT_USE_APIS: domainCannotUseApis,
|
|
||||||
DOMAIN_NOT_FOUND: domainNotFound,
|
|
||||||
DOMAIN_NOT_VERIFIED_SECONDARY: domainNotVerifiedSecondary,
|
|
||||||
DOMAIN_POLICY: domainPolicy,
|
|
||||||
DOWNLOAD_QUOTA_EXCEEDED: downloadQuotaExceeded,
|
|
||||||
DUPLICATE: duplicate,
|
|
||||||
EVENT_DURATION_EXCEEDS_LIMIT: eventDurationExceedsLimit,
|
|
||||||
EVENT_TYPE_RESTRICTION: eventTypeRestriction,
|
|
||||||
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE: expirationDatesMustBeInTheFuture,
|
|
||||||
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS: expirationDateNotAllowedForSharedDriveMembers,
|
|
||||||
FAILED_PRECONDITION: failedPrecondition,
|
|
||||||
FIELD_IN_USE: fieldInUse,
|
|
||||||
FIELD_NOT_WRITABLE: fieldNotWritable,
|
|
||||||
FILE_NEVER_WRITABLE: fileNeverWritable,
|
|
||||||
FILE_NOT_FOUND: fileNotFound,
|
|
||||||
FILE_ORGANIZER_NOT_YET_ENABLED_FOR_THIS_TEAMDRIVE: fileOrganizerNotYetEnabledForThisTeamDrive,
|
|
||||||
FILE_ORGANIZER_ON_FOLDERS_IN_SHARED_DRIVE_ONLY: fileOrganizerOnFoldersInSharedDriveOnly,
|
|
||||||
FILE_ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED: fileOrganizerOnNonTeamDriveNotSupported,
|
|
||||||
FILE_OWNER_NOT_MEMBER_OF_TEAMDRIVE: fileOwnerNotMemberOfTeamDrive,
|
|
||||||
FILE_OWNER_NOT_MEMBER_OF_WRITER_DOMAIN: fileOwnerNotMemberOfWriterDomain,
|
|
||||||
FILE_WRITER_TEAMDRIVE_MOVE_IN_DISABLED: fileWriterTeamDriveMoveInDisabled,
|
|
||||||
FORBIDDEN: forbidden,
|
|
||||||
GROUP_NOT_FOUND: groupNotFound,
|
|
||||||
ILLEGAL_ACCESS_ROLE_FOR_DEFAULT: illegalAccessRoleForDefault,
|
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES: insufficientAdministratorPrivileges,
|
|
||||||
INSUFFICIENT_ARCHIVED_USER_LICENSES: insufficientArchivedUserLicenses,
|
|
||||||
INSUFFICIENT_FILE_PERMISSIONS: insufficientFilePermissions,
|
|
||||||
INSUFFICIENT_PARENT_PERMISSIONS: insufficientParentPermissions,
|
|
||||||
INSUFFICIENT_PERMISSIONS: insufficientPermissions,
|
|
||||||
INTERNAL_ERROR: internalError,
|
|
||||||
INVALID: invalid,
|
|
||||||
INVALID_ARGUMENT: invalidArgument,
|
|
||||||
INVALID_ATTRIBUTE_VALUE: invalidAttributeValue,
|
|
||||||
INVALID_CUSTOMER_ID: invalidCustomerId,
|
|
||||||
INVALID_INPUT: invalidInput,
|
|
||||||
INVALID_LINK_VISIBILITY: invalidLinkVisibility,
|
|
||||||
INVALID_MEMBER: invalidMember,
|
|
||||||
INVALID_MESSAGE_ID: invalidMessageId,
|
|
||||||
INVALID_ORGUNIT: invalidOrgunit,
|
|
||||||
INVALID_ORGUNIT_NAME: invalidOrgunitName,
|
|
||||||
INVALID_OWNERSHIP_TRANSFER: invalidOwnershipTransfer,
|
|
||||||
INVALID_PARAMETER: invalidParameter,
|
|
||||||
INVALID_PARENT_ORGUNIT: invalidParentOrgunit,
|
|
||||||
INVALID_QUERY: invalidQuery,
|
|
||||||
INVALID_RESOURCE: invalidResource,
|
|
||||||
INVALID_SCHEMA_VALUE: invalidSchemaValue,
|
|
||||||
INVALID_SCOPE_VALUE: invalidScopeValue,
|
|
||||||
INVALID_SHARING_REQUEST: invalidSharingRequest,
|
|
||||||
LABEL_MULTIPLE_VALUES_FOR_SINGULAR_FIELD: labelMultipleValuesForSingularField,
|
|
||||||
LABEL_MUTATION_FORBIDDEN: labelMutationForbidden,
|
|
||||||
LABEL_MUTATION_ILLEGAL_SELECTION: labelMutationIllegalSelection,
|
|
||||||
LABEL_MUTATION_UNKNOWN_FIELD: labelMutationUnknownField,
|
|
||||||
LIMIT_EXCEEDED: limitExceeded,
|
|
||||||
LOGIN_REQUIRED: loginRequired,
|
|
||||||
MALFORMED_WORKING_LOCATION_EVENT: malformedWorkingLocationEvent,
|
|
||||||
MEMBER_NOT_FOUND: memberNotFound,
|
|
||||||
NO_LIST_TEAMDRIVES_ADMINISTRATOR_PRIVILEGE: noListTeamDrivesAdministratorPrivilege,
|
|
||||||
NO_MANAGE_TEAMDRIVE_ADMINISTRATOR_PRIVILEGE: noManageTeamDriveAdministratorPrivilege,
|
|
||||||
NOT_A_CALENDAR_USER: notACalendarUser,
|
|
||||||
NOT_FOUND: notFound,
|
|
||||||
NOT_IMPLEMENTED: notImplemented,
|
|
||||||
OPERATION_NOT_SUPPORTED: operationNotSupported,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_NOT_SUPPORTED: organizerOnNonTeamDriveNotSupported,
|
|
||||||
ORGANIZER_ON_NON_TEAMDRIVE_ITEM_NOT_SUPPORTED: organizerOnNonTeamDriveItemNotSupported,
|
|
||||||
ORGUNIT_NOT_FOUND: orgunitNotFound,
|
|
||||||
OUTSIDE_DOMAIN_MEMBER_CANNOT_CHANGE_TEAMDRIVE_RESTRICTIONS: outsideDomainMemberCannotChangeTeamDriveRestrictions,
|
|
||||||
OWNER_ON_TEAMDRIVE_ITEM_NOT_SUPPORTED: ownerOnTeamDriveItemNotSupported,
|
|
||||||
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED: ownershipChangeAcrossDomainNotPermitted,
|
|
||||||
PARTICIPANT_IS_NEITHER_ORGANIZER_NOR_ATTENDEE: participantIsNeitherOrganizerNorAttendee,
|
|
||||||
PERMISSION_DENIED: permissionDenied,
|
|
||||||
PERMISSION_NOT_FOUND: permissionNotFound,
|
|
||||||
PHOTO_NOT_FOUND: photoNotFound,
|
|
||||||
PUBLISH_OUT_NOT_PERMITTED: publishOutNotPermitted,
|
|
||||||
QUERY_REQUIRES_ADMIN_CREDENTIALS: queryRequiresAdminCredentials,
|
|
||||||
QUOTA_EXCEEDED: quotaExceeded,
|
|
||||||
RATE_LIMIT_EXCEEDED: rateLimitExceeded,
|
|
||||||
REQUIRED: required,
|
|
||||||
REQUIRED_ACCESS_LEVEL: requiredAccessLevel,
|
|
||||||
RESOURCE_EXHAUSTED: resourceExhausted,
|
|
||||||
RESOURCE_ID_NOT_FOUND: resourceIdNotFound,
|
|
||||||
RESOURCE_NOT_FOUND: resourceNotFound,
|
|
||||||
RESPONSE_PREPARATION_FAILURE: responsePreparationFailure,
|
|
||||||
REVISION_DELETION_NOT_SUPPORTED: revisionDeletionNotSupported,
|
|
||||||
REVISION_NOT_FOUND: revisionNotFound,
|
|
||||||
REVISIONS_NOT_SUPPORTED: revisionsNotSupported,
|
|
||||||
SERVICE_LIMIT: serviceLimit,
|
|
||||||
SERVICE_NOT_AVAILABLE: serviceNotAvailable,
|
|
||||||
SHARE_IN_NOT_PERMITTED: shareInNotPermitted,
|
|
||||||
SHARE_OUT_NOT_PERMITTED: shareOutNotPermitted,
|
|
||||||
SHARE_OUT_NOT_PERMITTED_TO_USER: shareOutNotPermittedToUser,
|
|
||||||
SHARE_OUT_WARNING: shareOutWarning,
|
|
||||||
SHARING_RATE_LIMIT_EXCEEDED: sharingRateLimitExceeded,
|
|
||||||
SHORTCUT_TARGET_INVALID: shortcutTargetInvalid,
|
|
||||||
STORAGE_QUOTA_EXCEEDED: storageQuotaExceeded,
|
|
||||||
SYSTEM_ERROR: systemError,
|
|
||||||
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION: targetUserRoleLimitedByLicenseRestriction,
|
|
||||||
TEAMDRIVE_ALREADY_EXISTS: teamDriveAlreadyExists,
|
|
||||||
TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION: teamDriveDomainUsersOnlyRestriction,
|
|
||||||
TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION: teamDriveTeamMembersOnlyRestriction,
|
|
||||||
TEAMDRIVE_FILE_LIMIT_EXCEEDED: teamDriveFileLimitExceeded,
|
|
||||||
TEAMDRIVE_HIERARCHY_TOO_DEEP: teamDriveHierarchyTooDeep,
|
|
||||||
TEAMDRIVE_MEMBERSHIP_REQUIRED: teamDriveMembershipRequired,
|
|
||||||
TEAMDRIVES_FOLDER_MOVE_IN_NOT_SUPPORTED: teamDrivesFolderMoveInNotSupported,
|
|
||||||
TEAMDRIVES_FOLDER_SHARING_NOT_SUPPORTED: teamDrivesFolderSharingNotSupported,
|
|
||||||
TEAMDRIVES_PARENT_LIMIT: teamDrivesParentLimit,
|
|
||||||
TEAMDRIVES_SHARING_RESTRICTION_NOT_ALLOWED: teamDrivesSharingRestrictionNotAllowed,
|
|
||||||
TEAMDRIVES_SHORTCUT_FILE_NOT_SUPPORTED: teamDrivesShortcutFileNotSupported,
|
|
||||||
TIME_RANGE_EMPTY: timeRangeEmpty,
|
|
||||||
TRANSIENT_ERROR: transientError,
|
|
||||||
UNIMPLEMENTED_ERROR: unimplementedError,
|
|
||||||
UNKNOWN_ERROR: unknownError,
|
|
||||||
UNSUPPORTED_LANGUAGE_CODE: unsupportedLanguageCode,
|
|
||||||
UNSUPPORTED_SUPERVISED_ACCOUNT: unsupportedSupervisedAccount,
|
|
||||||
UPLOAD_TOO_LARGE: uploadTooLarge,
|
|
||||||
USER_CANNOT_CREATE_TEAMDRIVES: userCannotCreateTeamDrives,
|
|
||||||
USER_ACCESS: userAccess,
|
|
||||||
USER_NOT_FOUND: userNotFound,
|
|
||||||
USER_RATE_LIMIT_EXCEEDED: userRateLimitExceeded,
|
|
||||||
}
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM GData resources
|
|
||||||
|
|
||||||
"""
|
|
||||||
API_DEPRECATED_MSG = 'Contacts API is being deprecated.'
|
|
||||||
|
|
||||||
# callGData throw errors
|
|
||||||
API_DEPRECATED = 612
|
|
||||||
BAD_GATEWAY = 601
|
|
||||||
BAD_REQUEST = 602
|
|
||||||
DOES_NOT_EXIST = 1301
|
|
||||||
ENTITY_EXISTS = 1300
|
|
||||||
FORBIDDEN = 603
|
|
||||||
GATEWAY_TIMEOUT = 612
|
|
||||||
INSUFFICIENT_PERMISSIONS = 604
|
|
||||||
INTERNAL_SERVER_ERROR = 1000
|
|
||||||
INVALID_DOMAIN = 605
|
|
||||||
INVALID_INPUT = 1317
|
|
||||||
INVALID_VALUE = 1801
|
|
||||||
NAME_NOT_VALID = 1303
|
|
||||||
NOT_FOUND = 606
|
|
||||||
NOT_IMPLEMENTED = 607
|
|
||||||
PRECONDITION_FAILED = 608
|
|
||||||
QUOTA_EXCEEDED = 609
|
|
||||||
SERVICE_NOT_APPLICABLE = 1410
|
|
||||||
SERVICE_UNAVAILABLE = 610
|
|
||||||
TOKEN_EXPIRED = 611
|
|
||||||
TOKEN_INVALID = 403
|
|
||||||
UNKNOWN_ERROR = 600
|
|
||||||
#
|
|
||||||
NON_TERMINATING_ERRORS = [API_DEPRECATED, BAD_GATEWAY, GATEWAY_TIMEOUT, QUOTA_EXCEEDED, SERVICE_UNAVAILABLE, TOKEN_EXPIRED]
|
|
||||||
EMAILSETTINGS_THROW_LIST = [INVALID_DOMAIN, DOES_NOT_EXIST, SERVICE_NOT_APPLICABLE, BAD_REQUEST, NAME_NOT_VALID, INTERNAL_SERVER_ERROR, INVALID_VALUE]
|
|
||||||
#
|
|
||||||
class apiDeprecated(Exception):
|
|
||||||
pass
|
|
||||||
class badRequest(Exception):
|
|
||||||
pass
|
|
||||||
class doesNotExist(Exception):
|
|
||||||
pass
|
|
||||||
class entityExists(Exception):
|
|
||||||
pass
|
|
||||||
class forbidden(Exception):
|
|
||||||
pass
|
|
||||||
class insufficientPermissions(Exception):
|
|
||||||
pass
|
|
||||||
class internalServerError(Exception):
|
|
||||||
pass
|
|
||||||
class invalidDomain(Exception):
|
|
||||||
pass
|
|
||||||
class invalidInput(Exception):
|
|
||||||
pass
|
|
||||||
class invalidValue(Exception):
|
|
||||||
pass
|
|
||||||
class nameNotValid(Exception):
|
|
||||||
pass
|
|
||||||
class notFound(Exception):
|
|
||||||
pass
|
|
||||||
class notImplemented(Exception):
|
|
||||||
pass
|
|
||||||
class preconditionFailed(Exception):
|
|
||||||
pass
|
|
||||||
class serviceNotApplicable(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
ERROR_CODE_EXCEPTION_MAP = {
|
|
||||||
API_DEPRECATED: apiDeprecated,
|
|
||||||
BAD_REQUEST: badRequest,
|
|
||||||
DOES_NOT_EXIST: doesNotExist,
|
|
||||||
ENTITY_EXISTS: entityExists,
|
|
||||||
FORBIDDEN: forbidden,
|
|
||||||
INSUFFICIENT_PERMISSIONS: insufficientPermissions,
|
|
||||||
INTERNAL_SERVER_ERROR: internalServerError,
|
|
||||||
INVALID_DOMAIN: invalidDomain,
|
|
||||||
INVALID_INPUT: invalidInput,
|
|
||||||
INVALID_VALUE: invalidValue,
|
|
||||||
NAME_NOT_VALID: nameNotValid,
|
|
||||||
NOT_FOUND: notFound,
|
|
||||||
NOT_IMPLEMENTED: notImplemented,
|
|
||||||
PRECONDITION_FAILED: preconditionFailed,
|
|
||||||
SERVICE_NOT_APPLICABLE: serviceNotApplicable,
|
|
||||||
}
|
|
||||||
@@ -1,329 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM global variables
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# The following GM_XXX constants are arbitrary but must be unique
|
|
||||||
# Most errors print a message and bail out with a return code
|
|
||||||
# Some commands want to set a non-zero return code but not bail
|
|
||||||
# GAM admin user from oauth2.txt or oauth2service.json
|
|
||||||
ADMIN = 'admn'
|
|
||||||
# Number/length of API call retries
|
|
||||||
API_CALLS_RETRY_DATA = 'rtry'
|
|
||||||
# GAM cache directory. If no_cache is True, this variable will be set to None
|
|
||||||
CACHE_DIR = 'gacd'
|
|
||||||
# Reset GAM cache directory after discovery
|
|
||||||
CACHE_DISCOVERY_ONLY = 'gcdo'
|
|
||||||
# Classroom owner service object
|
|
||||||
CLASSROOM_OWNER_SA = 'cosa'
|
|
||||||
# Classroom service not available
|
|
||||||
CLASSROOM_SERVICE_NOT_AVAILABLE = 'csna'
|
|
||||||
# Command logging
|
|
||||||
CMDLOG_HANDLER = 'clha'
|
|
||||||
CMDLOG_LOGGER = 'cllo'
|
|
||||||
# Convert to local time
|
|
||||||
CONVERT_TO_LOCAL_TIME = 'ctlt'
|
|
||||||
# Credentials scopes
|
|
||||||
CREDENTIALS_SCOPES = 'crsc'
|
|
||||||
# csvfile keyfield <FieldName> [delimiter <Character>] (matchfield <FieldName> <MatchPattern>)* [datafield <FieldName>(:<FieldName>*) [delimiter <String>]]
|
|
||||||
CSVFILE = 'csvf'
|
|
||||||
# { key: [datafieldvalues]}
|
|
||||||
CSV_DATA_DICT = 'csdd'
|
|
||||||
CSV_KEY_FIELD = 'cskf'
|
|
||||||
CSV_SUBKEY_FIELD = 'cssk'
|
|
||||||
CSV_DATA_FIELD = 'csdf'
|
|
||||||
# Filter for input column drop values
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER = 'cird'
|
|
||||||
# Mode (and|or) for input column drop values
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER_MODE = 'cidm'
|
|
||||||
# Filter for input column values
|
|
||||||
CSV_INPUT_ROW_FILTER = 'cirf'
|
|
||||||
# Mode (and|or) for input column values
|
|
||||||
CSV_INPUT_ROW_FILTER_MODE = 'cirm'
|
|
||||||
# Limit number of input rows
|
|
||||||
CSV_INPUT_ROW_LIMIT = 'cirl'
|
|
||||||
# Column delimiter in CSV output file
|
|
||||||
CSV_OUTPUT_COLUMN_DELIMITER = 'codl'
|
|
||||||
# Filter for output column headers to drop
|
|
||||||
CSV_OUTPUT_HEADER_DROP_FILTER = 'cohd'
|
|
||||||
# Filter for output column headers
|
|
||||||
CSV_OUTPUT_HEADER_FILTER = 'cohf'
|
|
||||||
# Force output column headers
|
|
||||||
CSV_OUTPUT_HEADER_FORCE = 'cofh'
|
|
||||||
# Order output column headers
|
|
||||||
CSV_OUTPUT_HEADER_ORDER = 'coho'
|
|
||||||
# Required output column headers
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED = 'corh'
|
|
||||||
# No escape character in CSV output file
|
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR = 'cone'
|
|
||||||
# Quote character in CSV output file
|
|
||||||
CSV_OUTPUT_QUOTE_CHAR = 'coqc'
|
|
||||||
# Filter for output column drop values
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER = 'cord'
|
|
||||||
# Mode (and|or) for output column drop values
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER_MODE = 'codm'
|
|
||||||
# Filter for output column values
|
|
||||||
CSV_OUTPUT_ROW_FILTER = 'corf'
|
|
||||||
# Mode (and|or) for output column values
|
|
||||||
CSV_OUTPUT_ROW_FILTER_MODE = 'corm'
|
|
||||||
# Limit number of output rows
|
|
||||||
CSV_OUTPUT_ROW_LIMIT = 'corl'
|
|
||||||
# Add timestamp column to CSV output file
|
|
||||||
CSV_OUTPUT_TIMESTAMP_COLUMN = 'cotc'
|
|
||||||
# Transpose output rows/columns
|
|
||||||
CSV_OUTPUT_TRANSPOSE = 'cotr'
|
|
||||||
# Output sort headers
|
|
||||||
CSV_OUTPUT_SORT_HEADERS = 'cosh'
|
|
||||||
# CSV todrive options
|
|
||||||
CSV_TODRIVE = 'todr'
|
|
||||||
# Current API services
|
|
||||||
CURRENT_API_SERVICES = 'caps'
|
|
||||||
# Current Client API
|
|
||||||
CURRENT_CLIENT_API = 'ccap'
|
|
||||||
# Current Client API scopes
|
|
||||||
CURRENT_CLIENT_API_SCOPES = 'ccas'
|
|
||||||
# Current Service Account API
|
|
||||||
CURRENT_SVCACCT_API = 'csap'
|
|
||||||
# Current Service Account API scopes
|
|
||||||
CURRENT_SVCACCT_API_SCOPES = 'csas'
|
|
||||||
# Current Service Account user
|
|
||||||
CURRENT_SVCACCT_USER = 'csa'
|
|
||||||
# datetime.datetime.now
|
|
||||||
DATETIME_NOW = 'dtno'
|
|
||||||
# If debug_level > 0: extra_args['prettyPrint'] = True, httplib2.debuglevel = gam_debug_level, appsObj.debug = True
|
|
||||||
DEBUG_LEVEL = 'dbgl'
|
|
||||||
# Whether debug output should redact sensitive credentials
|
|
||||||
DEBUG_REDACTION = 'dbrd'
|
|
||||||
# Decoded ID token
|
|
||||||
DECODED_ID_TOKEN = 'didt'
|
|
||||||
# Developer Preview APIs
|
|
||||||
DEVELOPER_PREVIEW_APIS = 'dapi'
|
|
||||||
# Index of start of <UserTypeEntity> in command line
|
|
||||||
ENTITY_CL_DELAY_START = 'ecld'
|
|
||||||
ENTITY_CL_START = 'ecls'
|
|
||||||
# Extra arguments to pass to GAPI functions
|
|
||||||
EXTRA_ARGS_LIST = 'exad'
|
|
||||||
# gam.cfg file
|
|
||||||
GAM_CFG_FILE = 'gcfi'
|
|
||||||
GAM_CFG_PATH = 'gcpa'
|
|
||||||
GAM_CFG_SECTION = 'gcse'
|
|
||||||
GAM_CFG_SECTION_NAME = 'gcsn'
|
|
||||||
# Path to gam
|
|
||||||
GAM_PATH = 'gpth'
|
|
||||||
# Python source, PyInstaller or StaticX?
|
|
||||||
GAM_TYPE = 'gtyp'
|
|
||||||
# Shared Service Account HTTP Object
|
|
||||||
HTTP_OBJECT = 'http'
|
|
||||||
# Are we on Global Compute Engine
|
|
||||||
IS_ON_GCE = 'ogce'
|
|
||||||
# Length of last Got message
|
|
||||||
LAST_GOT_MSG_LEN = 'lgml'
|
|
||||||
# License SKUs
|
|
||||||
LICENSE_SKUS = 'lsku'
|
|
||||||
# Make Building ID/Name map
|
|
||||||
MAKE_BUILDING_ID_NAME_MAP = 'mkbm'
|
|
||||||
# Dictionary mapping Building ID to Name
|
|
||||||
MAP_BUILDING_ID_TO_NAME = 'bi2n'
|
|
||||||
# Dictionary mapping Building Name to ID
|
|
||||||
MAP_BUILDING_NAME_TO_ID = 'bn2i'
|
|
||||||
# Dictionary mapping OrgUnit ID to Name
|
|
||||||
MAP_ORGUNIT_ID_TO_NAME = 'oi2n'
|
|
||||||
# Dictionary mapping Shared Drive ID to Name
|
|
||||||
MAP_SHAREDDRIVE_ID_TO_NAME = 'si2n'
|
|
||||||
# Make Role ID/Name map
|
|
||||||
MAKE_ROLE_ID_NAME_MAP = 'mkrm'
|
|
||||||
# Dictionary mapping Role ID to Name
|
|
||||||
MAP_ROLE_ID_TO_NAME = 'ri2n'
|
|
||||||
# Dictionary mapping Role Name to ID
|
|
||||||
MAP_ROLE_NAME_TO_ID = 'rn2i'
|
|
||||||
# Dictionary mapping User ID to Name
|
|
||||||
MAP_USER_ID_TO_NAME = 'ui2n'
|
|
||||||
# Multiprocess exit condition
|
|
||||||
MULTIPROCESS_EXIT_CONDITION = 'mpec'
|
|
||||||
# Multiprocess exit processing
|
|
||||||
MULTIPROCESS_EXIT_PROCESSING = 'mpep'
|
|
||||||
# Number of batch items
|
|
||||||
NUM_BATCH_ITEMS = 'nbat'
|
|
||||||
# Values retrieved from oauth2service.json
|
|
||||||
OAUTH2SERVICE_CLIENT_ID = 'osci'
|
|
||||||
OAUTH2SERVICE_JSON_DATA = 'osjd'
|
|
||||||
# Values retrieved from oauth2.txt
|
|
||||||
OAUTH2_CLIENT_ID = 'oaci'
|
|
||||||
# oauth2.txt lock file
|
|
||||||
OAUTH2_TXT_LOCK = 'oatl'
|
|
||||||
# Output date format, empty defalts to ISOFormat
|
|
||||||
OUTPUT_DATEFORMAT = 'oudf'
|
|
||||||
# Output time format, empty defalts to ISOFormat
|
|
||||||
OUTPUT_TIMEFORMAT = 'outf'
|
|
||||||
# gam.cfg parser
|
|
||||||
PARSER = 'pars'
|
|
||||||
# Process ID
|
|
||||||
PID = 'pid '
|
|
||||||
# Domains for print alises|groups|users
|
|
||||||
PRINT_AGU_DOMAINS = 'pagu'
|
|
||||||
# OrgUnits for print cros
|
|
||||||
PRINT_CROS_OUS = 'pcou'
|
|
||||||
# OrgUnits and children for print cros
|
|
||||||
PRINT_CROS_OUS_AND_CHILDREN = 'pcoc'
|
|
||||||
# Check API calls rate
|
|
||||||
RATE_CHECK_COUNT = 'rccn'
|
|
||||||
RATE_CHECK_START = 'rcst'
|
|
||||||
# Section name from outer gam, passed to inner gams
|
|
||||||
SECTION = 'sect'
|
|
||||||
# Enable/disable "Getting ... " messages
|
|
||||||
SHOW_GETTINGS = 'shog'
|
|
||||||
# Enable/disable NL at end of "Got ..." messages
|
|
||||||
SHOW_GETTINGS_GOT_NL = 'shgn'
|
|
||||||
# redirected files
|
|
||||||
SAVED_STDOUT = 'svso'
|
|
||||||
STDERR = 'stde'
|
|
||||||
STDOUT = 'stdo'
|
|
||||||
# Scopes values retrieved from oauth2service.json
|
|
||||||
SVCACCT_SCOPES = 'sasc'
|
|
||||||
# Were scopes values retrieved from oauth2service.json
|
|
||||||
SVCACCT_SCOPES_DEFINED = 'sasd'
|
|
||||||
# Most errors print a message and bail out with a return code
|
|
||||||
# Some commands want to set a non-zero return code but not bail
|
|
||||||
SYSEXITRC = 'sxrc'
|
|
||||||
# Encodings
|
|
||||||
SYS_ENCODING = 'syen'
|
|
||||||
# Shared by threadBatchWorker and threadBatchGAMCommands
|
|
||||||
TBATCH_QUEUE = 'batq'
|
|
||||||
# redirected file fields: name, mode, encoding, write header, multiproces, queue
|
|
||||||
REDIRECT_NAME = 'rdfn'
|
|
||||||
REDIRECT_MODE = 'rdmo'
|
|
||||||
REDIRECT_FD = 'rdfd'
|
|
||||||
REDIRECT_MULTI_FD = 'rdmf'
|
|
||||||
REDIRECT_STD = 'rdst'
|
|
||||||
REDIRECT_ENCODING = 'rden'
|
|
||||||
REDIRECT_WRITE_HEADER = 'rdwh'
|
|
||||||
REDIRECT_MULTIPROCESS = 'rdmp'
|
|
||||||
REDIRECT_QUEUE = 'rdq'
|
|
||||||
REDIRECT_QUEUE_NAME = 'name'
|
|
||||||
REDIRECT_QUEUE_CLEAR_ROW_FILTERS = 'clearRowFilters'
|
|
||||||
REDIRECT_QUEUE_TODRIVE = 'todrive'
|
|
||||||
REDIRECT_QUEUE_CSVPF = 'csvpf'
|
|
||||||
REDIRECT_QUEUE_DATA = 'rows'
|
|
||||||
REDIRECT_QUEUE_ARGS = 'args'
|
|
||||||
REDIRECT_QUEUE_GLOBALS = 'globals'
|
|
||||||
REDIRECT_QUEUE_VALUES = 'values'
|
|
||||||
REDIRECT_QUEUE_START = 'start'
|
|
||||||
REDIRECT_QUEUE_END = 'end'
|
|
||||||
REDIRECT_QUEUE_EOF = 'eof'
|
|
||||||
#
|
|
||||||
Globals = {
|
|
||||||
ADMIN: None,
|
|
||||||
API_CALLS_RETRY_DATA: {},
|
|
||||||
CACHE_DIR: None,
|
|
||||||
CACHE_DISCOVERY_ONLY: True,
|
|
||||||
CLASSROOM_OWNER_SA: {},
|
|
||||||
CLASSROOM_SERVICE_NOT_AVAILABLE: False,
|
|
||||||
CMDLOG_HANDLER: None,
|
|
||||||
CMDLOG_LOGGER: None,
|
|
||||||
CONVERT_TO_LOCAL_TIME: False,
|
|
||||||
CREDENTIALS_SCOPES: set(),
|
|
||||||
CSVFILE: {},
|
|
||||||
CSV_DATA_DICT: {},
|
|
||||||
CSV_KEY_FIELD: None,
|
|
||||||
CSV_SUBKEY_FIELD: None,
|
|
||||||
CSV_DATA_FIELD: None,
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER: [],
|
|
||||||
CSV_INPUT_ROW_DROP_FILTER_MODE: False,
|
|
||||||
CSV_INPUT_ROW_FILTER: [],
|
|
||||||
CSV_INPUT_ROW_FILTER_MODE: True,
|
|
||||||
CSV_INPUT_ROW_LIMIT: 0,
|
|
||||||
CSV_OUTPUT_COLUMN_DELIMITER: None,
|
|
||||||
CSV_OUTPUT_HEADER_DROP_FILTER: [],
|
|
||||||
CSV_OUTPUT_HEADER_FILTER: [],
|
|
||||||
CSV_OUTPUT_HEADER_FORCE: [],
|
|
||||||
CSV_OUTPUT_HEADER_ORDER: [],
|
|
||||||
CSV_OUTPUT_HEADER_REQUIRED: [],
|
|
||||||
CSV_OUTPUT_NO_ESCAPE_CHAR: None,
|
|
||||||
CSV_OUTPUT_QUOTE_CHAR: None,
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER: [],
|
|
||||||
CSV_OUTPUT_ROW_DROP_FILTER_MODE: False,
|
|
||||||
CSV_OUTPUT_ROW_FILTER: [],
|
|
||||||
CSV_OUTPUT_ROW_FILTER_MODE: True,
|
|
||||||
CSV_OUTPUT_ROW_LIMIT: 0,
|
|
||||||
CSV_OUTPUT_SORT_HEADERS: [],
|
|
||||||
CSV_OUTPUT_TIMESTAMP_COLUMN: None,
|
|
||||||
CSV_OUTPUT_TRANSPOSE: False,
|
|
||||||
CSV_TODRIVE: {},
|
|
||||||
CURRENT_API_SERVICES: {},
|
|
||||||
CURRENT_CLIENT_API: None,
|
|
||||||
CURRENT_CLIENT_API_SCOPES: set(),
|
|
||||||
CURRENT_SVCACCT_API: None,
|
|
||||||
CURRENT_SVCACCT_API_SCOPES: set(),
|
|
||||||
CURRENT_SVCACCT_USER: None,
|
|
||||||
DATETIME_NOW: None,
|
|
||||||
DEBUG_LEVEL: 0,
|
|
||||||
DEBUG_REDACTION: True,
|
|
||||||
DECODED_ID_TOKEN: None,
|
|
||||||
DEVELOPER_PREVIEW_APIS: set(),
|
|
||||||
ENTITY_CL_DELAY_START: 1,
|
|
||||||
ENTITY_CL_START: 1,
|
|
||||||
EXTRA_ARGS_LIST: [],
|
|
||||||
GAM_CFG_FILE: '',
|
|
||||||
GAM_CFG_PATH: '',
|
|
||||||
GAM_CFG_SECTION: '',
|
|
||||||
GAM_CFG_SECTION_NAME: '',
|
|
||||||
GAM_PATH: '.',
|
|
||||||
GAM_TYPE: '',
|
|
||||||
HTTP_OBJECT: None,
|
|
||||||
IS_ON_GCE: False,
|
|
||||||
LAST_GOT_MSG_LEN: 0,
|
|
||||||
LICENSE_SKUS: [],
|
|
||||||
MAKE_BUILDING_ID_NAME_MAP: True,
|
|
||||||
MAKE_ROLE_ID_NAME_MAP: True,
|
|
||||||
MAP_BUILDING_ID_TO_NAME: {},
|
|
||||||
MAP_BUILDING_NAME_TO_ID: {},
|
|
||||||
MAP_ORGUNIT_ID_TO_NAME: {},
|
|
||||||
MAP_SHAREDDRIVE_ID_TO_NAME: {},
|
|
||||||
MAP_ROLE_ID_TO_NAME: {},
|
|
||||||
MAP_ROLE_NAME_TO_ID: {},
|
|
||||||
MAP_USER_ID_TO_NAME: {},
|
|
||||||
MULTIPROCESS_EXIT_CONDITION: None,
|
|
||||||
MULTIPROCESS_EXIT_PROCESSING: False,
|
|
||||||
NUM_BATCH_ITEMS: 0,
|
|
||||||
OAUTH2SERVICE_CLIENT_ID: None,
|
|
||||||
OAUTH2SERVICE_JSON_DATA: {},
|
|
||||||
OAUTH2_CLIENT_ID: None,
|
|
||||||
OAUTH2_TXT_LOCK: None,
|
|
||||||
OUTPUT_DATEFORMAT: '',
|
|
||||||
OUTPUT_TIMEFORMAT: '',
|
|
||||||
PARSER: None,
|
|
||||||
PID: 0,
|
|
||||||
PRINT_AGU_DOMAINS: '',
|
|
||||||
PRINT_CROS_OUS: '',
|
|
||||||
PRINT_CROS_OUS_AND_CHILDREN: '',
|
|
||||||
RATE_CHECK_COUNT: 0,
|
|
||||||
RATE_CHECK_START: 0,
|
|
||||||
SECTION: None,
|
|
||||||
SHOW_GETTINGS: True,
|
|
||||||
SHOW_GETTINGS_GOT_NL: False,
|
|
||||||
SAVED_STDOUT: None,
|
|
||||||
STDERR: {},
|
|
||||||
STDOUT: {},
|
|
||||||
SVCACCT_SCOPES: {},
|
|
||||||
SVCACCT_SCOPES_DEFINED: False,
|
|
||||||
SYSEXITRC: 0,
|
|
||||||
SYS_ENCODING: 'utf-8',
|
|
||||||
TBATCH_QUEUE: None
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM indent processing
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
class GamIndent():
|
|
||||||
|
|
||||||
INDENT_SPACES_PER_LEVEL = ' '
|
|
||||||
|
|
||||||
# Shared state across all instances (class-level)
|
|
||||||
_indent = 0
|
|
||||||
|
|
||||||
@property
|
|
||||||
def indent(self):
|
|
||||||
return GamIndent._indent
|
|
||||||
@indent.setter
|
|
||||||
def indent(self, value):
|
|
||||||
GamIndent._indent = value
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
pass # state is shared at class level
|
|
||||||
|
|
||||||
def Reset(self):
|
|
||||||
GamIndent._indent = 0
|
|
||||||
|
|
||||||
def Increment(self):
|
|
||||||
GamIndent._indent += 1
|
|
||||||
|
|
||||||
def Decrement(self):
|
|
||||||
GamIndent._indent -= 1
|
|
||||||
|
|
||||||
def Spaces(self):
|
|
||||||
return self.INDENT_SPACES_PER_LEVEL*GamIndent._indent
|
|
||||||
|
|
||||||
def SpacesSub1(self):
|
|
||||||
return self.INDENT_SPACES_PER_LEVEL*(GamIndent._indent-1)
|
|
||||||
|
|
||||||
def MultiLineText(self, message, n=0):
|
|
||||||
return message.replace('\n', f'\n{self.INDENT_SPACES_PER_LEVEL*(GamIndent._indent+n)}').rstrip()
|
|
||||||
@@ -1,570 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM messages
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# These values can be translated into other languages
|
|
||||||
# Project creation messages in order of appearance
|
|
||||||
CREATING_PROJECT = 'Creating project "{0}"...\n'
|
|
||||||
CHECK_INTERRUPTED = 'Check interrupted'
|
|
||||||
CHECKING_PROJECT_CREATION_STATUS = 'Checking project creation status...\n'
|
|
||||||
NO_RIGHTS_GOOGLE_CLOUD_ORGANIZATION = 'Looks like you have no rights to your Google Cloud Organization.\nAttempting to fix that...\n'
|
|
||||||
YOUR_ORGANIZATION_NAME_IS = 'Your organization name is {0}\n'
|
|
||||||
YOU_HAVE_NO_RIGHTS_TO_CREATE_PROJECTS_AND_YOU_ARE_NOT_A_SUPER_ADMIN = 'You have no rights to create projects for your organization and you don\'t seem to be a super admin! Sorry, there\'s nothing more I can do.'
|
|
||||||
LOOKS_LIKE_NO_ONE_HAS_RIGHTS_TO_YOUR_GOOGLE_CLOUD_ORGANIZATION_ATTEMPTING_TO_GIVE_YOU_CREATE_RIGHTS = 'Looks like no one has rights to your Google Cloud Organization. Attempting to give you create rights...\n'
|
|
||||||
THE_FOLLOWING_RIGHTS_SEEM_TO_EXIST = 'The following rights seem to exist:\n'
|
|
||||||
GIVING_LOGIN_HINT_THE_CREATOR_ROLE = 'Giving {0} the role of {1}...\n'
|
|
||||||
ACCEPT_CLOUD_TOS = '''
|
|
||||||
Please go to:
|
|
||||||
|
|
||||||
https://console.cloud.google.com/projectselector2/home/dashboard?supportedpurview=project
|
|
||||||
|
|
||||||
sign in as {0} and accept the Terms of Service (ToS). As soon as you've accepted the ToS popup, you can return here and press enter.\n'''
|
|
||||||
|
|
||||||
PROJECT_STILL_BEING_CREATED_SLEEPING = 'Project still being created. Sleeping {0} seconds\n'
|
|
||||||
FAILED_TO_CREATE_PROJECT = 'Failed to create project: {0}\n'
|
|
||||||
SETTING_GAM_PROJECT_CONSENT_SCREEN_CREATING_CLIENT = 'Setting GAM project consent screen, creating client...\n'
|
|
||||||
CREATE_CLIENT_INSTRUCTIONS = '''
|
|
||||||
Please go to:
|
|
||||||
|
|
||||||
{0}
|
|
||||||
|
|
||||||
1. If "+ CREATE CLIENT" is on the screen, skip to step 14
|
|
||||||
2. Click "GET STARTED"
|
|
||||||
3. Under "App Information", enter {1} or another value in "App name *"
|
|
||||||
4. Under "App Information", enter {2} in "User support email *"
|
|
||||||
5. Click "NEXT"
|
|
||||||
6. Under "Audience", choose INTERNAL
|
|
||||||
7. Click "NEXT"
|
|
||||||
8. Under, "Contact Information", enter {2} or another value in "Email addresses *"
|
|
||||||
9. Click "NEXT"
|
|
||||||
10. Under "Finish", click "I agree to the Google API Services: User Data Policy."
|
|
||||||
11. Click "CONTINUE"
|
|
||||||
12. Click "CREATE"
|
|
||||||
13. Click "Clients" in the left-hand column
|
|
||||||
14. Click "+ CREATE CLIENT"
|
|
||||||
15. Choose "Desktop App" for "Application type"
|
|
||||||
16. Enter {1} or another value in "Name *"
|
|
||||||
17. Click "Create"
|
|
||||||
18. Under "Name", click your client name
|
|
||||||
19. Copy the "Client ID" value under "Additional information"
|
|
||||||
20. Paste it at the "Enter your Client ID: " prompt in your terminal
|
|
||||||
21. Press return/enter in your terminal
|
|
||||||
22. Switch back to the browser
|
|
||||||
23. Copy the "Client secret" value under "Client Secrets"
|
|
||||||
24. Paste it at the "Enter your Client Secret: " prompt in your terminal
|
|
||||||
25. Press return/enter in your terminal
|
|
||||||
26. Switch back to the browser
|
|
||||||
27. Click "OK"
|
|
||||||
28. These steps are complete
|
|
||||||
'''
|
|
||||||
ENTER_YOUR_CLIENT_ID = '\nEnter your Client ID: '
|
|
||||||
ENTER_YOUR_CLIENT_SECRET = '\nEnter your Client Secret: '
|
|
||||||
IS_NOT_A_VALID_CLIENT_ID = '''
|
|
||||||
|
|
||||||
{0}
|
|
||||||
|
|
||||||
Is not a valid Client ID.
|
|
||||||
|
|
||||||
Please make sure you are following the directions exactly and that there are no extra spaces in your Client ID.
|
|
||||||
'''
|
|
||||||
IS_NOT_A_VALID_CLIENT_SECRET = '''
|
|
||||||
|
|
||||||
{0}
|
|
||||||
|
|
||||||
Is not a valid Client Secret.
|
|
||||||
|
|
||||||
Please make sure you are following the directions exactly and that there are no extra spaces in your Client Secret.
|
|
||||||
'''
|
|
||||||
TRUST_GAM_CLIENT_ID = '''
|
|
||||||
It's important to mark the {0} Client ID as trusted by your Workspace instance.
|
|
||||||
|
|
||||||
Please go to:
|
|
||||||
|
|
||||||
https://admin.google.com/ac/owl/list?tab=configuredApps
|
|
||||||
|
|
||||||
1. Click on: Configure new app
|
|
||||||
2. Enter the following Client ID value in Search for app:
|
|
||||||
|
|
||||||
{1}
|
|
||||||
|
|
||||||
3. Press Search, select the {0} app, click
|
|
||||||
4. Keep the default scope or select a preferred scope that includes your GAM admin.
|
|
||||||
5. Press Continue
|
|
||||||
6. Select Trusted radio button, press Continue and Finish.
|
|
||||||
7. Press Confirm if Confirm parental consent pops up
|
|
||||||
8. Press enter here on the terminal once trust is complete.
|
|
||||||
'''
|
|
||||||
|
|
||||||
ENABLE_SERVICE_ACCOUNT_PRIVATE_KEY_UPLOAD = '''
|
|
||||||
Your workspace is configured to disable service account private key uploads.
|
|
||||||
|
|
||||||
Please go to:
|
|
||||||
|
|
||||||
https://github.com/GAM-team/GAM/wiki/Authorization#authorize-service-account-key-uploads
|
|
||||||
|
|
||||||
Follow the steps to allow a service account private key upload for the project ({0}) just created.
|
|
||||||
Once those steps are completed, you can continue with your project authentication.
|
|
||||||
'''
|
|
||||||
|
|
||||||
YOUR_GAM_PROJECT_IS_CREATED_AND_READY_TO_USE = '''
|
|
||||||
That\'s it! Your GAM Project is created and ready to use.
|
|
||||||
Proceed to the authentication steps.
|
|
||||||
'''
|
|
||||||
|
|
||||||
# check|update service messages in order of appearance
|
|
||||||
SYSTEM_TIME_STATUS = 'System time status'
|
|
||||||
YOUR_SYSTEM_TIME_DIFFERS_FROM_GOOGLE = 'Your system time differs from {0} by {1}'
|
|
||||||
PRESS_ENTER_ONCE_AUTHORIZATION_IS_COMPLETE = 'Press enter once authorization is complete.'
|
|
||||||
SERVICE_ACCOUNT_API_DISABLED = '{0} not enabled. Please run "gam update project" and "gam user user@domain.com update serviceaccount"'
|
|
||||||
SERVICE_ACCOUNT_PRIVATE_KEY_AUTHENTICATION = 'Service Account Private Key Authentication'
|
|
||||||
SERVICE_ACCOUNT_CHECK_PRIVATE_KEY_AGE = 'Service Account Private Key age; Google recommends rotating keys on a routine basis'
|
|
||||||
SERVICE_ACCOUNT_PRIVATE_KEY_AGE = 'Service Account Private Key age: {0} days'
|
|
||||||
SERVICE_ACCOUNT_SKIPPING_KEY_AGE_CHECK = 'Skipping Private Key age check: {0} rotation not necessary'
|
|
||||||
UPDATE_PROJECT_TO_VIEW_MANAGE_SAKEYS = 'Please run "gam update project" to view/manage service account keys'
|
|
||||||
DOMAIN_WIDE_DELEGATION_AUTHENTICATION = 'Domain-wide Delegation authentication'
|
|
||||||
DEPRECATED_SCOPES = 'Deprecated scopes that GAM should NEVER have DwD access to'
|
|
||||||
SCOPE_AUTHORIZATION_PASSED = '''All scopes PASSED!
|
|
||||||
|
|
||||||
Service Account Client name: {0} is fully authorized.
|
|
||||||
'''
|
|
||||||
SCOPE_AUTHORIZATION_UPDATE_PASSED = '''All scopes PASSED!
|
|
||||||
To update authorization (in case some scopes were unselected), please go to the following link in your browser:
|
|
||||||
{0}
|
|
||||||
{1}
|
|
||||||
|
|
||||||
You will be directed to the Google Workspace admin console Security > API Controls > Domain-wide Delegation page
|
|
||||||
The "Add a new Client ID" box will open
|
|
||||||
Make sure that "Overwrite existing client ID" is checked
|
|
||||||
Click AUTHORIZE
|
|
||||||
When the box closes you're done
|
|
||||||
After authorizing it may take some time for this test to pass so wait a few moments and then try this command again.
|
|
||||||
'''
|
|
||||||
SCOPE_AUTHORIZATION_FAILED = '''Some scopes FAILED or should be DISABLED!
|
|
||||||
To update authorization, please go to the following link in your browser:
|
|
||||||
{0}
|
|
||||||
{1}
|
|
||||||
|
|
||||||
You will be directed to the Google Workspace admin console Security > API Controls > Domain-wide Delegation page
|
|
||||||
The "Add a new Client ID" box will open
|
|
||||||
Make sure that "Overwrite existing client ID" is checked
|
|
||||||
Click AUTHORIZE
|
|
||||||
When the box closes you're done
|
|
||||||
After authorizing it may take some time for this test to pass so wait a few moments and then try this command again.
|
|
||||||
'''
|
|
||||||
# General messages
|
|
||||||
ACCESS_FORBIDDEN = 'Access Forbidden'
|
|
||||||
ACTION_APPLIED = 'Action Applied'
|
|
||||||
ACTION_IN_PROGRESS = 'Action {0} in progress'
|
|
||||||
ACTION_MAY_BE_DELAYED = 'Action may be delayed'
|
|
||||||
ADMIN_STATUS_CHANGED_TO = 'Admin Status Changed to'
|
|
||||||
ALL = 'All'
|
|
||||||
ALL_FOLDER_NAMES_MUST_BE_NON_BLANK = 'All folder names must be non-blank: {0}'
|
|
||||||
ALL_SKU_PRODUCTIDS_MUST_MATCH = 'All SKU productIds must match, {0} != {1}'
|
|
||||||
ALREADY_WAS_OWNER = 'Already was owner'
|
|
||||||
ALREADY_EXISTS = 'Already exists'
|
|
||||||
ALREADY_EXISTS_IN_TARGET_FOLDER = 'Already exists in {0}: {1}'
|
|
||||||
ALREADY_EXISTS_USE_MERGE_ARGUMENT = 'Already exists; use the "merge" argument to merge the labels'
|
|
||||||
API_ACCESS_DENIED = 'API access Denied'
|
|
||||||
API_CALLS_RETRY_DATA = 'API calls retry data\n'
|
|
||||||
API_CHECK_CLIENT_AUTHORIZATION = 'Please make sure the Client ID: {0} is authorized for the appropriate API or scopes: {1}\n\nRun: gam oauth create\n'
|
|
||||||
API_CHECK_SVCACCT_AUTHORIZATION = 'Please make sure the Service Account Client ID: {0} is authorized for the appropriate API or scopes: {1}\n\nRun: gam user {2} update serviceaccount\n'
|
|
||||||
API_ERROR_SETTINGS = 'API error, some settings not set'
|
|
||||||
ARE_BOTH_REQUIRED = 'Arguments {0} and {1} are both required'
|
|
||||||
ARE_MUTUALLY_EXCLUSIVE = 'Arguments {0} and {1} are mutually exclusive'
|
|
||||||
AS = 'as'
|
|
||||||
ATTENDEES_ADD = 'Add Attendees'
|
|
||||||
ATTENDEES_ADD_REMOVE = 'Add/Remove Attendees'
|
|
||||||
ATTENDEES_REMOVE = 'Remove Attendees'
|
|
||||||
AUTHORIZATION_FILE_ALREADY_EXISTS = '{0} already exists. Please delete or rename it before attempting to {1} project.'
|
|
||||||
AUTHENTICATION_FLOW_COMPLETE = '\nThe authentication flow has completed.'
|
|
||||||
AUTHENTICATION_FLOW_COMPLETE_CLOSE_BROWSER = 'The authentication flow has completed. You may close this browser window and return to {0}.'
|
|
||||||
AUTHENTICATION_FLOW_FAILED = 'The authentication flow failed, reissue command'
|
|
||||||
BAD_ENTITIES_IN_SOURCE = '{0} {1} {2} in source marked >>> <<< above'
|
|
||||||
BAD_REQUEST = 'Bad Request'
|
|
||||||
BATCH = 'Batch'
|
|
||||||
BATCH_CSV_LOOP_DASH_DEBUG_INCOMPATIBLE = '"gam {0} - ..." is not compatible with debugging. Disable debugging by setting debug_level = 0 in gam.cfg'
|
|
||||||
BATCH_CSV_PROCESSING_COMPLETE = '{0},0/{1},Processing complete\n'
|
|
||||||
BATCH_CSV_TERMINATE_N_PROCESSES = '{0},0/{1},Terminating {2} running {3}\n'
|
|
||||||
BATCH_CSV_WAIT_LIMIT = ', wait limit {0} seconds'
|
|
||||||
BATCH_CSV_WAIT_N_PROCESSES = '{0},0/{1},Waiting for {2} running {3} to finish before terminating{4}\n'
|
|
||||||
BATCH_NOT_PROCESSED_ERRORS = '{0}batch file: {1}, not processed, {2} {3}\n'
|
|
||||||
CALLING_GCLOUD_FOR_REAUTH = 'Calling gcloud for reauth credentials..."\n'
|
|
||||||
CAN_NOT_DELETE_USER_WITH_VAULT_HOLD = '{0}: The user may be (or have recently been) on Google Vault Hold and thus not eligible for deletion. You can check holds with "gam user {1} show vaultholds".'
|
|
||||||
CAN_NOT_BE_SPECIFIED_MORE_THAN_ONCE = 'Argument {0} can not be specified more than once'
|
|
||||||
CHAT_ADMIN_ACCESS_LIMITED_TO_ONE_USER = 'Chat adminaccess|asadmin limited to one user, {0} specified'
|
|
||||||
CHROME_TARGET_VERSION_FORMAT = r'^([a-z]+)-(\d+)$ or ^(\d{1,4}\.){1,4}$'
|
|
||||||
COLUMN_DOES_NOT_MATCH_ANY_INPUT_COLUMNS = '{0} column "{1}" does not match any input columns'
|
|
||||||
COLUMN_DOES_NOT_MATCH_ANY_OUTPUT_COLUMNS = '{0} column "{1}" does not match any output columns'
|
|
||||||
COMMAND_NOT_COMPATIBLE_WITH_ENABLE_DASA = 'gam {0} {1} is not compatible with enable_dasa = true in gam.cfg'
|
|
||||||
COMMIT_BATCH_COMPLETE = '{0},0/{1},commit-batch - running {2} finished, proceeding\n'
|
|
||||||
COMMIT_BATCH_WAIT_N_PROCESSES = '{0},0/{1},commit-batch - waiting for {2} running {3} to finish before proceeding\n'
|
|
||||||
CONFIRM_WIPE_YUBIKEY_PIV = 'This will wipe all YubiKey PIV keys and configuration from your YubiKey. Are you sure? (y/N) '
|
|
||||||
CONTACT_ADMINISTRATOR_FOR_PASSWORD = 'Contact administrator for password'
|
|
||||||
CONTACT_PHOTO_NOT_FOUND = 'Contact photo not found'
|
|
||||||
CONTAINS_AT_LEAST_1_ITEM = 'Contains at least 1 item'
|
|
||||||
COUNT_N_EXCEEDS_MAX_TO_PROCESS_M = 'Count {0} exceeds maximum to {1} {2}'
|
|
||||||
CORRUPT_FILE = 'Corrupt file'
|
|
||||||
COULD_NOT_FIND_ANY_YUBIKEY = 'Could not find any YubiKey\n'
|
|
||||||
COULD_NOT_FIND_YUBIKEY_WITH_SERIAL = 'Could not find YubiKey with serial number {0}\n'
|
|
||||||
CREATE_DELEGATE_NOTIFY_MESSAGE = '#user# has granted you #delegate# access to read, delete and send mail on their behalf.'
|
|
||||||
CREATE_DELEGATE_NOTIFY_SUBJECT = '#user# mail delegation to #delegate#'
|
|
||||||
CREATE_USER_NOTIFY_MESSAGE = 'Hello #givenname# #familyname#,\n\nYou have a new account at #domain#\nAccount details:\nUsername: #user#\nPassword: #password#\nStart using your new account by signing in at\nhttps://www.google.com/accounts/AccountChooser?Email=#user#&continue=https://workspace.google.com/dashboard\n'
|
|
||||||
CREATE_USER_NOTIFY_SUBJECT = 'Welcome to #domain#'
|
|
||||||
CSV_DATA_ALREADY_SAVED = 'CSV data already saved'
|
|
||||||
CSV_FILE_HEADERS = 'The CSV file ({0}) has the following headers:\n'
|
|
||||||
CSV_SAMPLE_COMMANDS = 'Here are the first {0} commands {1} will run\n'
|
|
||||||
DATA_FIELD_MISMATCH = 'datafield {0} does not match saved datafield {1}'
|
|
||||||
DATA_TRANSFER_COMPLETED = 'Data Transfer completed: {0}\n'
|
|
||||||
DATA_UPLOADED_TO_DRIVE_FILE = 'Data uploaded to Drive File'
|
|
||||||
DEFAULT_SMIME = 'Default S/MIME'
|
|
||||||
DELETED = 'Deleted'
|
|
||||||
DEVELOPER_PREVIEW_REQUIRED = 'Developer Preview is required for this command\n'
|
|
||||||
DEVICE_LIST_BUG = 'GAM hit Google internal bug 237397223. Please file a Google Support ticket stating that you are encountering this bug.'
|
|
||||||
DEVICE_LIST_BUG_WORKAROUND_NOT_POSSIBLE = 'GAM workaround for this issue only works if orderby argument is not used and query does not contain \'register\'.'
|
|
||||||
DEVICE_LIST_BUG_ATTEMPTING_WORKAROUND = 'GAM is attempting to work around the bug by filtering for devices created on or after the newest we\'ve seen ({0})...\n'
|
|
||||||
DIRECTLY_IN_THE = ' directly in the {0}'
|
|
||||||
DISABLE_TLS_MIN_MAX = 'Execute: gam select default config tls_max_version "" tls_min_version "" save\n'
|
|
||||||
DISPLAYNAME_NOT_ALLOWED_WHEN_UPDATING_MULTIPLE_SCHEMAS = 'displayname not allowed when updating multiple schemas'
|
|
||||||
DOES_NOT_EXIST = 'Does not exist'
|
|
||||||
DOES_NOT_EXIST_OR_HAS_INVALID_FORMAT = '{0}: {1}, Does not exist or has invalid format, {2}'
|
|
||||||
DOES_NOT_MATCH = 'Does not match {0}'
|
|
||||||
DOMAIN_NOT_FOUND_IN_DNS = 'Domain not found in DNS!'
|
|
||||||
DOMAIN_NOT_VERIFIED_SECONDARY = 'Domain is not a verified secondary domain'
|
|
||||||
DONE_GENERATING_PRIVATE_KEY_AND_PUBLIC_CERTIFICATE = 'Done generating private key and public certificate'
|
|
||||||
DO_NOT_EXIST = 'Do not exist'
|
|
||||||
DOWNLOADING_AGAIN_AND_OVER_WRITING = 'Downloading again and over-writing...'
|
|
||||||
DUPLICATE = 'Duplicate'
|
|
||||||
DUPLICATE_ALREADY_A_ROLE = 'Duplicate, already a {0}'
|
|
||||||
DYNAMIC_GROUP_MEMBERSHIP_CANNOT_BE_MODIFIED = 'Dynamic group membership cannot be modified'
|
|
||||||
EITHER = 'Either'
|
|
||||||
EMAIL_ADDRESS_IS_UNMANAGED_ACCOUNT = 'The email address is an unmanaged account'
|
|
||||||
ENABLE_PROJECT_APIS_AUTOMATICALLY_OR_MANUALLY = 'Do you want to enable project APIs [a]utomatically or [m]anually? (a/m): '
|
|
||||||
ENTER_GSUITE_ADMIN_EMAIL_ADDRESS = '\nEnter your Google Workspace admin email address? '
|
|
||||||
ENTER_MANAGE_GCP_PROJECT_EMAIL_ADDRESS = '\nEnter your Google Workspace admin or GCP project manager email address authorized to manage project(s): {0}? '
|
|
||||||
ENTER_VERIFICATION_CODE_OR_URL = 'Enter verification code or paste "Unable to connect" URL from other computer (only URL data up to &scope required): '
|
|
||||||
ENTITY_DOES_NOT_EXIST = '{0} does not exist'
|
|
||||||
ENTITY_NAME_NOT_VALID = 'Entity Name Not Valid'
|
|
||||||
ERROR = 'error'
|
|
||||||
ERRORS = 'errors'
|
|
||||||
EVENT_IS_CANCELED = 'Event is canceled'
|
|
||||||
EXECUTE_GAM_OAUTH_CREATE = '\nPlease run\n\ngam oauth delete\ngam oauth create\n\n'
|
|
||||||
EXISTS = 'Exists'
|
|
||||||
EXPECTED = 'Expected'
|
|
||||||
EXPORT_NOT_COMPLETE = 'Export needs to be complete before downloading, current status is: {0}'
|
|
||||||
EXTRACTING_PUBLIC_CERTIFICATE = 'Extracting public certificate'
|
|
||||||
FAILED_PRECONDITION = 'Failed precondition'
|
|
||||||
FAILED_TO_PARSE_AS_JSON = 'Failed to parse as JSON'
|
|
||||||
FAILED_TO_PARSE_AS_LIST = 'Failed to parse as list'
|
|
||||||
FIELD_NOT_FOUND_IN_SCHEMA = 'Field {0} not found in schema {1}'
|
|
||||||
FILE_NOT_FOUND = 'File {0} not found'
|
|
||||||
FINISHED = 'Finished'
|
|
||||||
FILTER_CAN_ONLY_CONTAIN_ONE_CATEGORY_LABEL = 'Filter can only contain one CATEGORY label'
|
|
||||||
FILTER_CAN_ONLY_CONTAIN_ONE_USER_LABEL = 'Filter can only contain one USER label'
|
|
||||||
FOR = 'for'
|
|
||||||
FORBIDDEN = 'Forbidden'
|
|
||||||
FORMAT_NOT_AVAILABLE = 'Format ({0}) not available'
|
|
||||||
FORMAT_NOT_DOWNLOADABLE = 'Format not downloadable'
|
|
||||||
FROM = 'From'
|
|
||||||
FROM_LC = 'from'
|
|
||||||
FULL_PATH_MUST_START_WITH_DRIVE = 'fullpath must start with {0} or {1}'
|
|
||||||
GAM_BATCH_FILE_WRITTEN = 'GAM batch file {0} written\n'
|
|
||||||
GAM_LATEST_VERSION_NOT_AVAILABLE = 'GAM Latest Version information not available'
|
|
||||||
GAM_OUT_OF_MEMORY = 'GAM has run out of memory. If this is a large Google Workspace instance, you should use a 64-bit version of GAM on Windows or a 64-bit version of Python on other systems.'
|
|
||||||
GENERATING_NEW_PRIVATE_KEY = 'Generating new private key'
|
|
||||||
GETTING = 'Getting'
|
|
||||||
GETTING_ALL = 'Getting all'
|
|
||||||
GRANTING_RIGHTS_TO_ROTATE_ITS_OWN_PRIVATE_KEY = '{0} rights to rotate its own private key'
|
|
||||||
GOOGLE_DELEGATION_ERROR = 'Google delegation error, delegator and delegate both exist and are valid for delegation'
|
|
||||||
GOT = 'Got'
|
|
||||||
GROUP_MAPS_TO_MULTIPLE_OUS = 'File: {0}, Group: {1} references multiple OUs: {2}'
|
|
||||||
GROUP_MAPS_TO_OU_INVALID_ROW = 'File: {0}, Invalid row, must contain non-blank <EmailAddress> and <OrgUnitPath>: <{1}> <{2}>'
|
|
||||||
GUARDIAN_INVITATION_STATUS_NOT_PENDING = 'Guardian invitation status is not PENDING'
|
|
||||||
HAS_CHILD_ORGS = 'Has child {0}'
|
|
||||||
HAS_INVALID_FORMAT = '{0}: {1}, Has invalid format'
|
|
||||||
HEADER_NOT_FOUND_IN_CSV_HEADERS = 'Header "{0}" not found in CSV headers of "{1}".'
|
|
||||||
HELP_SYNTAX = 'Help: Syntax in file {0}\n'
|
|
||||||
HELP_WIKI = 'Help: Documentation is at {0}\n'
|
|
||||||
IGNORED = 'Ignored'
|
|
||||||
INSTRUCTIONS_CLIENT_SECRETS_JSON = 'Please run\n\ngam create|use project\ngam oauth create\n\nto create and authorize a Client account.\n'
|
|
||||||
INSTRUCTIONS_OAUTH2SERVICE_JSON = 'Please run\n\ngam create|use project\ngam user <user> update serviceaccount\n\nto create and authorize a Service account.\n'
|
|
||||||
INSUFFICIENT_PERMISSIONS_TO_PERFORM_TASK = 'Insufficient permissions to perform this task'
|
|
||||||
INTER_BATCH_WAIT_INCREASED = 'inter_batch_wait increased to {0:.2f}'
|
|
||||||
INVALID = 'Invalid'
|
|
||||||
INVALID_ALIAS = 'Invalid Alias'
|
|
||||||
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
|
||||||
INVALID_CHARSET = 'Invalid charset "{0}"'
|
|
||||||
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
|
||||||
INVALID_DEVICE_QUERY = 'Invalid {0} query "{1}"; it must be if the form "field:value" and must not contain a "?"'
|
|
||||||
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
|
||||||
INVALID_ENTITY = 'Invalid {0}, {1}'
|
|
||||||
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
|
||||||
INVALID_FILE_SELECTION_WITH_ADMIN_ACCESS = 'Invalid file selection with adminaccess|asadmin'
|
|
||||||
INVALID_GROUP = 'Invalid Group'
|
|
||||||
INVALID_HTTP_HEADER = 'Invalid http header data: {0}'
|
|
||||||
INVALID_JSON_INFORMATION = 'Google API reported Invalid JSON Information'
|
|
||||||
INVALID_JSON_SETTING = 'Invalid JSON setting'
|
|
||||||
INVALID_LIST = 'Invalid list'
|
|
||||||
INVALID_MEMBER = 'Invalid Member address'
|
|
||||||
INVALID_MESSAGE_ID = 'Invalid message id(s)'
|
|
||||||
INVALID_MIMETYPE = 'Invalid mimeType {0}, must be {1}'
|
|
||||||
INVALID_NUMBER_OF_CHAT_SPACE_MEMBERS = '{0} type {1} number of members, {2}, must be in range {3} to {4}'
|
|
||||||
INVALID_ORGUNIT = 'Invalid Organizational Unit'
|
|
||||||
INVALID_PATH = 'Invalid Path'
|
|
||||||
INVALID_PERMISSION_ATTRIBUTE_TYPE = 'permission attribute {0} not allowed with type {1}'
|
|
||||||
INVALID_REGION = 'See: https://github.com/GAM-team/GAM/wiki/Context-Aware-Access-Levels#caa-region-codes'
|
|
||||||
INVALID_QUERY = 'Invalid Query'
|
|
||||||
INVALID_RE = 'Invalid RE'
|
|
||||||
INVALID_REQUEST = 'Invalid Request'
|
|
||||||
INVALID_RESELLER_CUSTOMER_NAME = 'name must be: accounts/<ResellerID>/customers/<ChannelCustomerID>'
|
|
||||||
INVALID_ROLE = 'Invalid subkeyfield Role, must be one of: {0}'
|
|
||||||
INVALID_SCHEMA_VALUE = 'Invalid Schema Value'
|
|
||||||
INVALID_SCOPE = 'Invalid Scope'
|
|
||||||
INVALID_SITE = 'Invalid Site ({0}), must match pattern ({1})'
|
|
||||||
INVALID_TAG_SPECIFICATION = 'Invalid tag, expected field.subfield or field.subfield.subfield.string'
|
|
||||||
INVALID_TIMEOFDAY_RANGE = '{0} must be less than/equal to {1}'
|
|
||||||
IN_SKIPIDS = 'In skipids'
|
|
||||||
IN_THE = ' in the {0}'
|
|
||||||
IN_TRASH_AND_EXCLUDE_TRASHED = 'In Trash and excludeTrashed'
|
|
||||||
IS_EXPIRED_OR_REVOKED = '{0}: {1}, Is expired or has been revoked'
|
|
||||||
IS_NOT_DONE_CHECKING_IN_SECONDS = 'Is not done, checking again in {0} seconds'
|
|
||||||
IS_NOT_UNIQUE = 'Is not unique, {0}: {1}'
|
|
||||||
IS_REQD_TO_CHG_PWD_NO_DELEGATION = 'Is required to change password at next login. You must change password or clear changepassword flag for delegation.'
|
|
||||||
IS_SUSPENDED_NO_BACKUPCODES = 'User is suspended. You must unsuspend to process backupcodes'
|
|
||||||
IS_SUSPENDED_NO_DELEGATION = 'Is suspended. You must unsuspend for delegation.'
|
|
||||||
IS_YUBIKEY_INSERTED = 'Is YubiKey inserted?'
|
|
||||||
JSON_ERROR = 'JSON error "{0}" in file {1}'
|
|
||||||
JSON_KEY_NOT_FOUND = 'JSON key "{0}" not found in file {1}'
|
|
||||||
KIOSK_MODE_REQUIRED = ' This command ({0}) requires that the ChromeOS device be in Kiosk mode.'
|
|
||||||
LESS_THAN_1_SECOND = 'less than 1 second'
|
|
||||||
LIST_CHROMEOS_INVALID_INPUT_PAGE_TOKEN_RETRY = 'List ChromeOSdevices Invalid Input: pageToken retry'
|
|
||||||
LOGGING_INITIALIZATION_ERROR = 'Logging initialization error: {0}'
|
|
||||||
LOOKING_UP_GOOGLE_UNIQUE_ID = 'Looking up Google Unique ID'
|
|
||||||
MAP_PERMISSIONS_EMAIL_FILE_HEADERS_REQUIRED = '{0} <CSVFileInput> requires headers "sourceEmail" and "destinationEmail"'
|
|
||||||
MARKED_AS = 'Marked as'
|
|
||||||
MATCHED_THE_FOLLOWING = 'Matched the following'
|
|
||||||
MATTER_NOT_OPEN = 'Matter needs to be open, current state is: {0}'
|
|
||||||
MAXIMUM_OF = 'maximum of'
|
|
||||||
MEMBERSHIP_IS_PENDING_WILL_DELETE_ADD_TO_ACCEPT = 'Membership is pending, will delete and add to accept'
|
|
||||||
MIMETYPE_MISMATCH = 'Shortcut target mimeType {0} does not match actual target mimeType {1}'
|
|
||||||
MIMETYPE_NOT_PRESENT_IN_ATTACHMENT = 'MIME type not present in attachment'
|
|
||||||
MISMATCH_RE_SEARCH_REPLACE_SUBFIELDS = 'The subfield ({2}) in replace "{3}" exceeds the number of subfields ({0}) in search "{1}"'
|
|
||||||
MISMATCH_SEARCH_REPLACE_SUBFIELDS = 'The number of subfields ({0}) in search "{1}" does not match the number of subfields ({2}) in replace "{3}"'
|
|
||||||
MISSING_FIELDS = 'Missing fields: {0}\n'
|
|
||||||
MULTIPLE_BUILDINGS_SAME_NAME = '{0} {1} with the same (case-insensitive) name exist'
|
|
||||||
MULTIPLE_ENTITIES_FOUND = 'Multiple {0} ({1}) found, {2}'
|
|
||||||
MULTIPLE_ITEMS_SPECIFIED = 'Multiple {0} are specfied, only one is allowed'
|
|
||||||
MULTIPLE_ITEMS_MARKED_PRIMARY = 'Multiple {0} are marked primary, only one can be primary'
|
|
||||||
MULTIPLE_PARENTS_SPECIFIED = 'Multiple parents ({0}) specified, only one is allowed'
|
|
||||||
MULTIPLE_SEARCH_METHODS_SPECIFIED = 'Multiple search methods ({0}) specified, only one is allowed'
|
|
||||||
MULTIPLE_SSO_PROFILES_MATCH = 'Multiple SSO profiles match display name {0}:\n'
|
|
||||||
MULTIPLE_YUBIKEYS_CONNECTED = 'Multiple YubiKeys connected. Specify yubikey_serial_number and one of {0}\n'
|
|
||||||
MUST_BE_NUMERIC = 'Must be numeric'
|
|
||||||
NEED_READ_ACCESS = 'Need Read access'
|
|
||||||
NEED_READ_WRITE_ACCESS = 'Need Read/Write access'
|
|
||||||
NEED_WRITE_ACCESS = 'Need Write access'
|
|
||||||
NESTED_LOOP_CMD_NOT_ALLOWED = 'Command can not be nested.'
|
|
||||||
NEWUSER_REQUIREMENTS = 'newuser option requires: at least 1 recipient and givenname, familyname and password options'
|
|
||||||
NEW_OWNER_MUST_DIFFER_FROM_OLD_OWNER = 'New owner must differ from old owner'
|
|
||||||
NO_DATA = 'No data'
|
|
||||||
NON_BLANK = 'Non-blank'
|
|
||||||
NON_EMPTY = 'Non-empty'
|
|
||||||
NOT_A = 'Not a'
|
|
||||||
NOT_A_PRIMARY_EMAIL_ADDRESS = 'Not a primary email address'
|
|
||||||
NOT_A_MEMBER = 'Not a member'
|
|
||||||
NOT_ACTIVE = 'Not Active'
|
|
||||||
NOT_ALLOWED = 'Not Allowed'
|
|
||||||
NOT_AN_ENTITY = 'Not a {0}'
|
|
||||||
NOT_APPROPRIATE = 'Not Appropriate'
|
|
||||||
NOT_COMPATIBLE = 'Not Compatible'
|
|
||||||
NOT_COPYABLE = 'Not Copyable'
|
|
||||||
NOT_COPYABLE_INTO_ITSELF = 'Not copyable into itself'
|
|
||||||
NOT_COPYABLE_SAME_NAME_CURRENT_FOLDER_MERGE = 'Not copyable with same name into current folder with duplicatefolders merge'
|
|
||||||
NOT_COPYABLE_SAME_NAME_CURRENT_FOLDER_OVERWRITE = 'Not copyable with same name into current folder with duplicatefiles overwriteall|overwriteolder'
|
|
||||||
NOT_DELETABLE = 'Not Deletable'
|
|
||||||
NOT_FOUND = 'Not Found'
|
|
||||||
NOT_MOVABLE = 'Not Movable'
|
|
||||||
NOT_MOVABLE_IN_TRASH = 'Not Movable, in Trash'
|
|
||||||
NOT_MOVABLE_INTO_ITSELF = 'Not movable into itself'
|
|
||||||
NOT_MOVABLE_SAME_NAME_CURRENT_FOLDER_MERGE = 'Not movable with same name into current folder with duplicatefolders merge'
|
|
||||||
NOT_MOVABLE_SAME_NAME_CURRENT_FOLDER_OVERWRITE = 'Not movable with same name into current folder with duplicatefiles overwriteall|overwriteolder'
|
|
||||||
NOT_OWNED_BY = 'Not owned by {0}'
|
|
||||||
NOT_SELECTED = 'Not Selected'
|
|
||||||
NOT_WRITABLE = 'Not Writable'
|
|
||||||
NOW_THE_PRIMARY_DOMAIN = 'Now the primary domain'
|
|
||||||
NO_ACTION_SPECIFIED = 'No action specified'
|
|
||||||
NO_AVAILABLE_LICENSES = "There aren't enough available licenses for the specified product-SKU pair(s)"
|
|
||||||
NO_CHANGES = 'No changes'
|
|
||||||
NO_CLIENT_ACCESS_ALLOWED = 'No Client Access allowed'
|
|
||||||
NO_CLIENT_ACCESS_CREATE_UPDATE_ALLOWED = 'No Client Access create/update allowed'
|
|
||||||
NO_COLUMNS_SELECTED_WITH_CSV_OUTPUT_HEADER_FILTER = 'No columns selected with {0} and {1}'
|
|
||||||
NO_CREDENTIALS_REPLACEMENT = '{0}: {1} has {2} {3}. We only replace if there are 2.\n'
|
|
||||||
NO_CSV_DATA_TO_UPLOAD = 'No CSV data to upload'
|
|
||||||
NO_CSV_FILE_DATA_FOUND = 'No CSV file data found'
|
|
||||||
NO_CSV_FILE_DATA_SAVED = 'No CSV file data saved'
|
|
||||||
NO_CSV_FILE_SUBKEYS_SAVED = 'No CSV file subkeys saved'
|
|
||||||
NO_DATA_TRANSFER_APP_FOR_PARAMETER = 'No data transfer application for key {0}'
|
|
||||||
NO_ENTITIES_FOUND = 'No {0} found'
|
|
||||||
NO_ENTITIES_MATCHED = 'No {0} matched'
|
|
||||||
NO_FILTER_ACTIONS = 'No {0} actions specified'
|
|
||||||
NO_FILTER_CRITERIA = 'No {0} criteria specified'
|
|
||||||
NO_LABELS_MATCH = 'No Labels match'
|
|
||||||
NO_LABELS_TO_PROCESS = 'No Labels to process'
|
|
||||||
NO_MESSAGES_WITH_LABEL = 'No Messages with Label'
|
|
||||||
NO_PARENTS_TO_CONVERT_TO_SHORTCUTS = 'No parents to convert to shortcuts'
|
|
||||||
NO_REPORT_AVAILABLE = 'No {0} report available.'
|
|
||||||
NO_SCOPES_FOR_API = 'There are no scopes authorized for the API(s): {0}'
|
|
||||||
NO_SERIAL_NUMBERS_SPECIFIED = 'No serial numbers specified'
|
|
||||||
NO_SSO_PROFILE_MATCHES = 'No SSO profile matches display name {0}'
|
|
||||||
NO_SSO_PROFILE_ASSIGNED = 'No SSO profile assigned to {0} {1}'
|
|
||||||
NO_SVCACCT_ACCESS_ALLOWED = 'No Service Account Access allowed'
|
|
||||||
NO_TRANSFER_LACK_OF_DISK_SPACE = 'Transfer not performed due to lack of target drive space.'
|
|
||||||
NO_USAGE_PARAMETERS_DATA_AVAILABLE = 'No usage parameters data available.'
|
|
||||||
NO_USER_COUNTS_DATA_AVAILABLE = 'No User counts data available.'
|
|
||||||
NUM_SELECTED_CLIENT_SCOPES = '\n{0} scopes are selected, if more than {1} scopes are selected, Google will probably generate a "Something went wrong" error\n'
|
|
||||||
OAUTH2_GO_TO_LINK_MESSAGE = """
|
|
||||||
Go to the following link in a browser on this computer or on another computer:
|
|
||||||
|
|
||||||
{url}
|
|
||||||
|
|
||||||
If you use a browser on another computer, you will get a browser error that the site can't be reached AFTER you
|
|
||||||
click the Allow button, paste "Unable to connect" URL from other computer (only URL data up to &scope required):
|
|
||||||
"""
|
|
||||||
ON_CURRENT_PRIVATE_KEY = ' on current key'
|
|
||||||
ON_VAULT_HOLD = 'On Google Vault Hold'
|
|
||||||
ONLY_ADMINISTRATORS_CAN_PERFORM_SHARED_DRIVE_QUERIES = 'Only administrators can perform Shared Drive queries'
|
|
||||||
ONLY_ADMINISTRATORS_CAN_SPECIFY_SHARED_DRIVE_ORGUNIT = 'Only administrators can specify Shared Drive Org Unit'
|
|
||||||
ONLY_ONE_DEVICE_SELECTION_ALLOWED = 'Only one device selection allowed, filter = "{0}"'
|
|
||||||
ONLY_ONE_JSON_RANGE_ALLOWED = 'Only one range/json allowed'
|
|
||||||
ONLY_ONE_OWNER_ALLOWED = 'Only one owner allowed'
|
|
||||||
OR = 'or'
|
|
||||||
OU_AND_MOVETOOU_CANNOT_BE_IDENTICAL = 'ou {0} can not be be identical to movetoou {1}'
|
|
||||||
OU_SUBOUS_CANNOT_BE_MOVED_TO_MOVETOOU = 'ou {0} sub OUs can not be be moved to movetoou {1}'
|
|
||||||
PERMISSION_DENIED = 'The caller does not have permission'
|
|
||||||
PLEASE_CORRECT_YOUR_SYSTEM_TIME = 'Please correct your system time.'
|
|
||||||
PLEASE_ENTER_A_OR_M = 'Please enter a or m ...\n'
|
|
||||||
PLEASE_SELECT_ENTITY_TO_PROCESS = '{0} {1} found, please select the correct one to {2} and specify with {3}'
|
|
||||||
PLEASE_SPECIFY_BUILDING_EXACT_CASE_NAME_OR_ID = 'Please specify building by exact case name or ID.'
|
|
||||||
POLICY_NAME_NOT_FOUND = 'JSON key "name" not found in JSON data'
|
|
||||||
PREVIEW_ONLY = 'Preview Only'
|
|
||||||
PRIMARY_EMAIL_DID_NOT_MATCH_PATTERN = 'primaryEmail address did not match pattern: {0}'
|
|
||||||
PROCESS = 'process'
|
|
||||||
PROCESSES = 'processes'
|
|
||||||
PROCESSING_ITEM_N = '{0},0,Processing item {1}\n'
|
|
||||||
PROCESSING_ITEM_N_OF_M = '{0},0,Processing item {1}/{2}\n'
|
|
||||||
PROFILE_PHOTO_NOT_FOUND = 'Profile photo not found'
|
|
||||||
PROFILE_PHOTO_IS_DEFAULT = 'Profile photo is default'
|
|
||||||
QUOTA_EXCEEDED = 'Quota exceeded'
|
|
||||||
REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid with contentrestrictions readonly true'
|
|
||||||
REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
|
|
||||||
RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
|
|
||||||
REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
|
|
||||||
REFUSING_TO_DEPROVISION_N_DEVICES = 'Refusing to deprovision {0} devices due to maxtodepov {1}.\nSpecify "maxtodeprov 0" to deprovision all {0} devices'
|
|
||||||
REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
|
|
||||||
REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
|
|
||||||
REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
|
|
||||||
RERUN_THE_COMMAND_AND_SPECIFY_A_NEW_SANAME = """
|
|
||||||
Re-run the command specify a new service account name with: saname <ServiceAccountName>
|
|
||||||
See: https://github.com/GAM-team/GAM/wiki/Authorization#advanced-use
|
|
||||||
"""
|
|
||||||
RESOURCE_CAPACITY_FLOOR_REQUIRED = 'Options "capacity <Number>" (<Number> > 0) and "floor <String>" required'
|
|
||||||
RESOURCE_FLOOR_REQUIRED = 'Option "floor <String>" required'
|
|
||||||
RESULTS_TOO_LARGE_FOR_GOOGLE_SPREADSHEET = 'Results are too large for Google Spreadsheets. Uploading as a regular CSV file.'
|
|
||||||
RETRIES_EXHAUSTED = 'Retries {0} exhausted'
|
|
||||||
RETRYING_GOOGLE_SHEET_EXPORT_SLEEPING = 'Retrying Google Sheet export {0}/{1}. Sleeping {2} seconds\n'
|
|
||||||
ROLE_MUST_BE_ORGANIZER = 'Role must be organizer'
|
|
||||||
ROLE_NOT_IN_SET = 'Role not in set: {0})'
|
|
||||||
SCHEMA_WOULD_HAVE_NO_FIELDS = '{0} would have no {1}'
|
|
||||||
SELECTED = 'Selected'
|
|
||||||
SERVICE_NOT_APPLICABLE = 'Service not applicable/Does not exist'
|
|
||||||
SERVICE_NOT_APPLICABLE_THIS_ADDRESS = 'Service not applicable for this address: {0}'
|
|
||||||
SERVICE_NOT_ENABLED = '{0} Service/App not enabled'
|
|
||||||
SHORTCUT_TARGET_CAPABILITY_IS_FALSE = '{0} capability {1} is False'
|
|
||||||
SITES_COMMAND_DEPRECATED = 'The Classic Sites API is deprecated, this command will not work:\n{0}'
|
|
||||||
SKU_HAS_NO_MATCHING_ARCHIVED_USER_SKU = 'SKU {0} has no matching Archived User SKU'
|
|
||||||
STARTING_THREAD = 'Starting thread'
|
|
||||||
STATISTICS_COPY_FILE = 'Total: {0}, Copied: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Copy Failed: {5}, Not copyable: {6}, In skipids: {7}, Permissions Failed: {8}, Protected Ranges Failed: {9}'
|
|
||||||
STATISTICS_COPY_FOLDER = 'Total: {0}, Copied: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Merged: {5}, Copy Failed: {6}, Not writable: {7}, Permissions Failed: {8}'
|
|
||||||
STATISTICS_MOVE_FILE = 'Total: {0}, Moved: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Move Failed: {5}, Not movable: {6}'
|
|
||||||
STATISTICS_MOVE_FOLDER = 'Total: {0}, Moved: {1}, Shortcut created {2}, Shortcut exists {3}, Duplicate: {4}, Merged: {5}, Move Failed: {6}, Not writable: {7}'
|
|
||||||
STATISTICS_USER_NOT_ORGANIZER = 'User not organizer: {0}'
|
|
||||||
STRING_LENGTH = 'string length'
|
|
||||||
STUDENT_NOT_IN_COURSE = 'Student not in course'
|
|
||||||
SUBKEY_FIELD_MISMATCH = 'subkeyfield {0} does not match saved subkeyfield {1}'
|
|
||||||
SUBSCRIPTION_NOT_FOUND = 'Could not find subscription'
|
|
||||||
SUFFIX_NOT_ALLOWED_WITH_CUSTOMLANGUAGE = 'Suffix {0} not allowed with customLanguage {1}'
|
|
||||||
TASKLIST_TITLE_NOT_FOUND = 'Task list title not found'
|
|
||||||
THREAD = 'thread'
|
|
||||||
THREADS = 'threads'
|
|
||||||
TO = 'To'
|
|
||||||
TO_LC = 'to'
|
|
||||||
TO_MAXIMUM_OF = 'to maximum of'
|
|
||||||
TO_SET_UP_GOOGLE_CHAT = """
|
|
||||||
To set up Google Chat for your current project, please go to:
|
|
||||||
|
|
||||||
{0}
|
|
||||||
|
|
||||||
and follow the instructions at:
|
|
||||||
|
|
||||||
https://github.com/GAM-team/GAM/wiki/Chat-Bot-Setup-Use#set-up-a-chat-bot
|
|
||||||
|
|
||||||
You'll use projects/{1}/topics/no-topic in Connection settings Cloud Pub/Sub Topic Name
|
|
||||||
"""
|
|
||||||
TOTAL_ITEMS_IN_ENTITY = 'Total {0} in {1}'
|
|
||||||
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
|
||||||
UNABLE_TO_GET_PERMISSION_ID = 'Unable to get Permission ID for <{0}>'
|
|
||||||
UNABLE_TO_CREATE_NOT_FOUND_USER = 'Unable to create not found user, some required field (givenName, familyName, password/notfoundpassword) not present'
|
|
||||||
UNAVAILABLE = 'Unavailable'
|
|
||||||
UNKNOWN = 'Unknown'
|
|
||||||
UNKNOWN_API_OR_VERSION = 'Unknown Google API or version: ({0}), contact {1}'
|
|
||||||
UNRECOVERABLE_ERROR = 'Unrecoverable error'
|
|
||||||
UPDATE_ATTENDEE_CHANGES = 'Update attendee changes'
|
|
||||||
UPDATE_GAM_TO_64BIT = "You're running a 32-bit version of GAM on a 64-bit version of Windows, upgrade to a windows-x86_64 version of GAM"
|
|
||||||
UPDATE_PRIMARY_EMAIL_PREVIEW = 'updateprimaryemail preview: {0}'
|
|
||||||
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_MESSAGE = 'The account password for #givenname# #familyname#, #user# has been changed to: #password#\n'
|
|
||||||
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_SUBJECT = 'Account #user# password has been changed'
|
|
||||||
UPLOAD_CSV_FILE_INTERNAL_ERROR = 'Google reported "{0}" but the file was probably uploaded, check that it has {1} rows'
|
|
||||||
UPLOADING_NEW_PUBLIC_CERTIFICATE_TO_GOOGLE = 'Uploading new public certificate to Google...\n'
|
|
||||||
URL_ERROR = 'URL error: {0}'
|
|
||||||
USE_MIMETYPE_TO_SPECIFY_GOOGLE_FORMAT = 'Use "mimetype <MimeType>" to specify Google file format\n'
|
|
||||||
USED = 'Used'
|
|
||||||
USER_BELONGS_TO_N_GROUPS_THAT_MAP_TO_ORGUNITS = 'User belongs to {0} groups ({1}) that map to OUs'
|
|
||||||
USER_CANCELLED = 'User cancelled'
|
|
||||||
USER_HAS_MULTIPLE_DIRECT_OR_INHERITED_MEMBERSHIPS_IN_GROUP = 'User has multiple direct or inherited memberships in group'
|
|
||||||
USER_IN_OTHER_DOMAIN = '{0}: {1} in other domain.'
|
|
||||||
USER_IS_NOT_ORGANIZER = 'User is not organizer, use anyorganizer option to override'
|
|
||||||
USER_NOT_IN_MATCHUSERS = 'User not in matchusers'
|
|
||||||
USER_SUBS_NOT_ALLOWED_TAG_REPLACEMENT = 'user substitutions not allowed in replace <Tag> <String>'
|
|
||||||
USE_DOIT_ARGUMENT_TO_PERFORM_ACTION = 'Use the "doit" argument to perform action'
|
|
||||||
USING_N_PROCESSES = '{0},0/{1},Using {2} {3}...\n'
|
|
||||||
VALUES_ARE_NOT_CONSISTENT = 'Values are not consistent'
|
|
||||||
VERSION_UPDATE_AVAILABLE = 'Version update available'
|
|
||||||
WAITING_FOR_DATA_TRANSFER_TO_COMPLETE_SLEEPING = 'Waiting for Data Transfer to complete. Sleeping {0} seconds\n'
|
|
||||||
WAITING_FOR_ITEM_CREATION_TO_COMPLETE_SLEEPING = 'Waiting for {0} creation to complete. Sleeping {1} seconds\n'
|
|
||||||
WHAT_IS_YOUR_PROJECT_ID = '\nWhat is your project ID? '
|
|
||||||
WILL_RERUN_WITH_NO_BROWSER_TRUE = 'Will re-run command with no_browser true\n'
|
|
||||||
WITH = 'with'
|
|
||||||
WOULD_MAKE_MEMBERSHIP_CYCLE = 'Would make membership cycle'
|
|
||||||
WRITER_ACCESS_REQUIRED_TO_BOTH_CALENDARS = 'Writer access required to both calendars'
|
|
||||||
WROTE_PRIVATE_KEY_DATA = 'Wrote private key data to {0}\n'
|
|
||||||
WROTE_PUBLIC_CERTIFICATE = 'Wrote public certificate to {0}\n'
|
|
||||||
YOU_CAN_ADD_DOMAIN_TO_ACCOUNT = 'You can now add: {0} or its subdomains as secondary or domain aliases of the Google Workspace Account: {1}'
|
|
||||||
YUBIKEY_GENERATING_NONEXPORTABLE_PRIVATE_KEY = 'YubiKey is generating a non-exportable private key...\n'
|
|
||||||
YUBIKEY_PIN_SET_TO = 'YubiKey PIN set to: {0}\n'
|
|
||||||
@@ -1,262 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""Google SKUs
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Products/SKUs
|
|
||||||
_PRODUCTS = {
|
|
||||||
'101001': 'Cloud Identity Free',
|
|
||||||
'101005': 'Cloud Identity Premium',
|
|
||||||
'101031': 'Google Workspace for Education',
|
|
||||||
'101033': 'Google Voice',
|
|
||||||
'101034': 'Google Workspace Archived User',
|
|
||||||
'101035': 'Cloud Search',
|
|
||||||
'101036': 'Google Meet Global Dialing',
|
|
||||||
'101037': 'Google Workspace for Education',
|
|
||||||
'101038': 'AppSheet',
|
|
||||||
'101039': 'Assured Controls',
|
|
||||||
'101040': 'Chrome Enterprise',
|
|
||||||
'101043': 'Google Workspace Additional Storage',
|
|
||||||
'101047': 'Gemini',
|
|
||||||
'101049': 'Education Endpoint Management',
|
|
||||||
'101050': 'Colab',
|
|
||||||
'Google-Apps': 'Google Workspace',
|
|
||||||
'Google-Chrome-Device-Management': 'Google Chrome Device Management',
|
|
||||||
'Google-Drive-storage': 'Google Drive Storage',
|
|
||||||
'Google-Vault': 'Google Vault',
|
|
||||||
}
|
|
||||||
_SKUS = {
|
|
||||||
'1010010001': {
|
|
||||||
'product': '101001', 'aliases': ['identity', 'cloudidentity', 'cloudidentityfree'], 'displayName': 'Cloud Identity Free'},
|
|
||||||
'1010050001': {
|
|
||||||
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
|
||||||
'1010070001': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gwef', 'workspaceeducationfundamentals'], 'displayName': 'Google Workspace for Education Fundamentals'},
|
|
||||||
'1010070004': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gwegmo', 'workspaceeducationgmailonly'], 'displayName': 'Google Workspace for Education Gmail Only'},
|
|
||||||
'1010310002': {
|
|
||||||
'product': '101031', 'aliases': ['gsefe', 'e4e', 'gsuiteenterpriseeducation'], 'displayName': 'Google Workspace for Education Plus - Legacy'},
|
|
||||||
'1010310003': {
|
|
||||||
'product': '101031', 'aliases': ['gsefes', 'e4es', 'gsuiteenterpriseeducationstudent'], 'displayName': 'Google Workspace for Education Plus - Legacy (Student)'},
|
|
||||||
'1010310005': {
|
|
||||||
'product': '101031', 'aliases': ['gwes', 'workspaceeducationstandard'], 'displayName': 'Google Workspace for Education Standard'},
|
|
||||||
'1010310006': {
|
|
||||||
'product': '101031', 'aliases': ['gwesstaff', 'workspaceeducationstandardstaff'], 'displayName': 'Google Workspace for Education Standard (Staff)'},
|
|
||||||
'1010310007': {
|
|
||||||
'product': '101031', 'aliases': ['gwesstudent', 'workspaceeducationstandardstudent'], 'displayName': 'Google Workspace for Education Standard (Extra Student)'},
|
|
||||||
'1010310008': {
|
|
||||||
'product': '101031', 'aliases': ['gwep', 'workspaceeducationplus'], 'displayName': 'Google Workspace for Education Plus'},
|
|
||||||
'1010310009': {
|
|
||||||
'product': '101031', 'aliases': ['gwepstaff', 'workspaceeducationplusstaff'], 'displayName': 'Google Workspace for Education Plus (Staff)'},
|
|
||||||
'1010310010': {
|
|
||||||
'product': '101031', 'aliases': ['gwepstudent', 'workspaceeducationplusstudent'], 'displayName': 'Google Workspace for Education Plus (Extra Student)'},
|
|
||||||
'1010330002': {
|
|
||||||
'product': '101033', 'aliases': ['gvpremier', 'voicepremier', 'googlevoicepremier'], 'displayName': 'Google Voice Premier'},
|
|
||||||
'1010330003': {
|
|
||||||
'product': '101033', 'aliases': ['gvstarter', 'voicestarter', 'googlevoicestarter'], 'displayName': 'Google Voice Starter'},
|
|
||||||
'1010330004': {
|
|
||||||
'product': '101033', 'aliases': ['gvstandard', 'voicestandard', 'googlevoicestandard'], 'displayName': 'Google Voice Standard'},
|
|
||||||
'1010350001': {
|
|
||||||
'product': '101035', 'aliases': ['cloudsearch'], 'displayName': 'Cloud Search'},
|
|
||||||
'1010360001': {
|
|
||||||
'product': '101036', 'aliases': ['meetdialing','googlemeetglobaldialing'], 'displayName': 'Google Meet Global Dialing'},
|
|
||||||
'1010370001': {
|
|
||||||
'product': '101037', 'aliases': ['gwetlu', 'workspaceeducationupgrade'], 'displayName': 'Google Workspace for Education: Teaching and Learning Upgrade'},
|
|
||||||
'1010380001': {
|
|
||||||
'product': '101038', 'aliases': ['appsheetcore'], 'displayName': 'AppSheet Core'},
|
|
||||||
'1010380002': {
|
|
||||||
'product': '101038', 'aliases': ['appsheetstandard', 'appsheetenterprisestandard'], 'displayName': 'AppSheet Enterprise Standard'},
|
|
||||||
'1010380003': {
|
|
||||||
'product': '101038', 'aliases': ['appsheetplus', 'appsheetenterpriseplus'], 'displayName': 'AppSheet Enterprise Plus'},
|
|
||||||
'1010390001': {
|
|
||||||
'product': '101039', 'aliases': ['assuredcontrols'], 'displayName': 'Assured Controls'},
|
|
||||||
'1010390002': {
|
|
||||||
'product': '101039', 'aliases': ['assuredcontrolsplus'], 'displayName': 'Assured Controls Plus'},
|
|
||||||
'1010400001': {
|
|
||||||
'product': '101040', 'aliases': ['beyondcorp', 'beyondcorpenterprise', 'bce', 'cep', 'chromeenterprisepremium'], 'displayName': 'Chrome Enterprise Premium'},
|
|
||||||
'1010430001': {
|
|
||||||
'product': '101043', 'aliases': ['gwas', 'plusstorage'], 'displayName': 'Google Workspace Additional Storage'},
|
|
||||||
'1010470001': {
|
|
||||||
'product': '101047', 'aliases': ['geminient', 'duetai'], 'displayName': 'Gemini Enterprise - Legacy'},
|
|
||||||
'1010470002': {
|
|
||||||
'product': '101047', 'aliases': ['gwlabs', 'workspacelabs'], 'displayName': 'Google Workspace Labs'},
|
|
||||||
'1010470003': {
|
|
||||||
'product': '101047', 'aliases': ['geminibiz'], 'displayName': 'Gemini Business'},
|
|
||||||
'1010470004': {
|
|
||||||
'product': '101047', 'aliases': ['gaiproedu', 'geminiedu'], 'displayName': 'Google AI Pro for Education'},
|
|
||||||
'1010470005': {
|
|
||||||
'product': '101047', 'aliases': ['geminiedupremium'], 'displayName': 'Gemini Education Premium'},
|
|
||||||
'1010470006': {
|
|
||||||
'product': '101047', 'aliases': ['aisecurity'], 'displayName': 'AI Security'},
|
|
||||||
'1010470007': {
|
|
||||||
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
|
||||||
'1010470008': {
|
|
||||||
'product': '101047', 'aliases': ['geminiultra'], 'displayName': 'Google AI Ultra for Business'},
|
|
||||||
'1010470009': {
|
|
||||||
'product': '101047', 'aliases': ['aiexpandedaccess'], 'displayName': 'AI Expanded Access'},
|
|
||||||
'1010490001': {
|
|
||||||
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
|
||||||
'1010500001': {
|
|
||||||
'product': '101050', 'aliases': ['colabpro'], 'displayName': 'Colab Pro'},
|
|
||||||
'1010500002': {
|
|
||||||
'product': '101050', 'aliases': ['colabpro+', 'colabproplus'], 'displayName': 'Colab Pro+'},
|
|
||||||
'Google-Apps': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['standard', 'free'], 'displayName': 'G Suite Legacy'},
|
|
||||||
'Google-Apps-For-Business': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gafb', 'gafw', 'basic', 'gsuitebasic'], 'displayName': 'G Suite Basic'},
|
|
||||||
'Google-Apps-For-Education': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gafe', 'gsuiteeducation', 'gsuiteedu'], 'displayName': 'Google Workspace for Education - Fundamentals'},
|
|
||||||
'Google-Apps-For-Government': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gafg', 'gsuitegovernment', 'gsuitegov'], 'displayName': 'Google Workspace Government'},
|
|
||||||
'Google-Apps-For-Postini': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gams', 'postini', 'gsuitegams', 'gsuitepostini', 'gsuitemessagesecurity'], 'displayName': 'Google Apps Message Security'},
|
|
||||||
'Google-Apps-Lite': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gal', 'gsl', 'lite', 'gsuitelite'], 'displayName': 'G Suite Lite'},
|
|
||||||
'Google-Apps-Unlimited': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gau', 'gsb', 'unlimited', 'gsuitebusiness'], 'displayName': 'G Suite Business'},
|
|
||||||
'1010020020': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['gae', 'gse', 'enterprise', 'gsuiteenterprise',
|
|
||||||
'wsentplus', 'workspaceenterpriseplus'], 'displayName': 'Google Workspace Enterprise Plus (formerly G Suite Enterprise)'},
|
|
||||||
'1010020025': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsbizplus', 'workspacebusinessplus'], 'displayName': 'Google Workspace Business Plus'},
|
|
||||||
'1010020026': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsentstan', 'workspaceenterprisestandard'], 'displayName': 'Google Workspace Enterprise Standard'},
|
|
||||||
'1010020027': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsbizstart', 'wsbizstarter', 'workspacebusinessstarter'], 'displayName': 'Google Workspace Business Starter'},
|
|
||||||
'1010020028': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsbizstan', 'workspacebusinessstandard'], 'displayName': 'Google Workspace Business Standard'},
|
|
||||||
'1010020029': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wes', 'wsentstarter', 'workspaceenterprisestarter'], 'displayName': 'Workspace Enterprise Starter'},
|
|
||||||
'1010020030': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsflw', 'workspacefrontline', 'workspacefrontlineworker'], 'displayName': 'Google Workspace Frontline Starter'},
|
|
||||||
'1010020031': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsflwstan', 'workspacefrontlinestan', 'workspacefrontlineworkerstan'], 'displayName': 'Google Workspace Frontline Standard'},
|
|
||||||
'1010020034': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsflwplus', 'workspacefrontlineplus', 'workspacefrontlineworkerplus'], 'displayName': 'Google Workspace Frontline Plus'},
|
|
||||||
'1010340001': {
|
|
||||||
'product': '101034', 'aliases': ['gseau', 'enterprisearchived', 'gsuiteenterprisearchived'], 'displayName': 'Google Workspace Enterprise Plus - Archived User'},
|
|
||||||
'1010340002': {
|
|
||||||
'product': '101034', 'aliases': ['gsbau', 'businessarchived', 'gsuitebusinessarchived'], 'displayName': 'Google Workspace Business - Archived User'},
|
|
||||||
'1010340003': {
|
|
||||||
'product': '101034', 'aliases': ['wsbizplusarchived', 'workspacebusinessplusarchived'], 'displayName': 'Google Workspace Business Plus - Archived User'},
|
|
||||||
'1010340004': {
|
|
||||||
'product': '101034', 'aliases': ['wsentstanarchived', 'workspaceenterprisestandardarchived'], 'displayName': 'Google Workspace Enterprise Standard - Archived User'},
|
|
||||||
'1010340005': {
|
|
||||||
'product': '101034', 'aliases': ['wsbizstarterarchived', 'workspacebusinessstarterarchived'], 'displayName': 'Google Workspace Business Starter - Archived User'},
|
|
||||||
'1010340006': {
|
|
||||||
'product': '101034', 'aliases': ['wsbizstanarchived', 'workspacebusinessstanarchived'], 'displayName': 'Google Workspace Business Standard - Archived User'},
|
|
||||||
'1010340007': {
|
|
||||||
'product': '101034', 'aliases': ['gwefau', 'gwefarchived', 'workspaceeducationfundamentalsarchived'], 'displayName': 'Google Workspace for Education Fundamentals - Archived User'},
|
|
||||||
'1010060001': {
|
|
||||||
'product': '101006', 'aliases': ['gsuiteessentials', 'essentials',
|
|
||||||
'd4e', 'driveenterprise', 'drive4enterprise',
|
|
||||||
'wsess', 'workspaceesentials'], 'displayName': 'Google Workspace Essentials (formerly G Suite Essentials)'},
|
|
||||||
'1010060003': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsentess', 'workspaceenterpriseessentials'], 'displayName': 'Google Workspace Enterprise Essentials'},
|
|
||||||
'1010060005': {
|
|
||||||
'product': 'Google-Apps', 'aliases': ['wsessplus', 'workspaceessentialsplus'], 'displayName': 'Google Workspace Enterprise Essentials Plus'},
|
|
||||||
'Google-Drive-storage-20GB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive20gb', '20gb', 'googledrivestorage20gb'], 'displayName': 'Google Drive Storage 20GB'},
|
|
||||||
'Google-Drive-storage-50GB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive50gb', '50gb', 'googledrivestorage50gb'], 'displayName': 'Google Drive Storage 50GB'},
|
|
||||||
'Google-Drive-storage-200GB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive200gb', '200gb', 'googledrivestorage200gb'], 'displayName': 'Google Drive Storage 200GB'},
|
|
||||||
'Google-Drive-storage-400GB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive400gb', '400gb', 'googledrivestorage400gb'], 'displayName': 'Google Drive Storage 400GB'},
|
|
||||||
'Google-Drive-storage-1TB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive1tb', '1tb', 'googledrivestorage1tb'], 'displayName': 'Google Drive Storage 1TB'},
|
|
||||||
'Google-Drive-storage-2TB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive2tb', '2tb', 'googledrivestorage2tb'], 'displayName': 'Google Drive Storage 2TB'},
|
|
||||||
'Google-Drive-storage-4TB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive4tb', '4tb', 'googledrivestorage4tb'], 'displayName': 'Google Drive Storage 4TB'},
|
|
||||||
'Google-Drive-storage-8TB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive8tb', '8tb', 'googledrivestorage8tb'], 'displayName': 'Google Drive Storage 8TB'},
|
|
||||||
'Google-Drive-storage-16TB': {
|
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive16tb', '16tb', 'googledrivestorage16tb'], 'displayName': 'Google Drive Storage 16TB'},
|
|
||||||
'Google-Vault': {
|
|
||||||
'product': 'Google-Vault', 'aliases': ['vault', 'googlevault'], 'displayName': 'Google Vault'},
|
|
||||||
'Google-Vault-Former-Employee': {
|
|
||||||
'product': 'Google-Vault', 'aliases': ['vfe', 'googlevaultformeremployee'], 'displayName': 'Google Vault - Former Employee'},
|
|
||||||
'Google-Chrome-Device-Management': {
|
|
||||||
'product': 'Google-Chrome-Device-Management', 'aliases': ['chrome', 'cdm', 'googlechromedevicemanagement'], 'displayName': 'Google Chrome Device Management'}
|
|
||||||
}
|
|
||||||
|
|
||||||
ARCHIVABLE_SKUS = {'1010020020', '1010020025', '1010020026', '1010020027', '1010020028', 'Google-Apps-Unlimited'}
|
|
||||||
|
|
||||||
def getProductAndSKU(sku):
|
|
||||||
l_sku = sku.lower().replace('-', '').replace(' ', '').replace('"', '').replace("'", '').strip()
|
|
||||||
if l_sku.startswith('nv:'):
|
|
||||||
if ':' in sku[3:]:
|
|
||||||
return sku[3:].split(':', 1)
|
|
||||||
return (None, sku)
|
|
||||||
for a_sku, sku_values in list(_SKUS.items()):
|
|
||||||
if ((l_sku == a_sku.lower().replace('-', '')) or
|
|
||||||
(l_sku in sku_values['aliases']) or
|
|
||||||
(l_sku == sku_values['displayName'].lower().replace(' ', ''))):
|
|
||||||
return (sku_values['product'], a_sku)
|
|
||||||
return (None, sku)
|
|
||||||
|
|
||||||
def productIdToDisplayName(productId):
|
|
||||||
return _PRODUCTS.get(productId, productId)
|
|
||||||
|
|
||||||
def formatProductIdDisplayName(productId):
|
|
||||||
productIdDisplay = productIdToDisplayName(productId)
|
|
||||||
if productId == productIdDisplay:
|
|
||||||
return productId
|
|
||||||
return f'{productId} ({productIdDisplay})'
|
|
||||||
|
|
||||||
def normalizeProductId(product):
|
|
||||||
l_product = product.lower().replace('-', '').replace(' ', '').strip()
|
|
||||||
if l_product.startswith('nv:'):
|
|
||||||
return (True, product[3:])
|
|
||||||
for a_sku, sku_values in list(_SKUS.items()):
|
|
||||||
if ((l_product == sku_values['product'].lower().replace('-', '')) or
|
|
||||||
(l_product == a_sku.lower().replace('-', '')) or
|
|
||||||
(l_product in sku_values['aliases']) or
|
|
||||||
(l_product == sku_values['displayName'].lower().replace(' ', ''))):
|
|
||||||
return (True, sku_values['product'])
|
|
||||||
return (False, product)
|
|
||||||
|
|
||||||
def getSortedProductList():
|
|
||||||
return sorted(_PRODUCTS)
|
|
||||||
|
|
||||||
def skuIdToDisplayName(skuId):
|
|
||||||
return _SKUS[skuId]['displayName'] if skuId in _SKUS else skuId
|
|
||||||
|
|
||||||
def formatSKUIdDisplayName(skuId):
|
|
||||||
skuIdDisplay = skuIdToDisplayName(skuId)
|
|
||||||
if skuId == skuIdDisplay:
|
|
||||||
return skuId
|
|
||||||
return f'{skuId} ({skuIdDisplay})'
|
|
||||||
|
|
||||||
def getSortedSKUList():
|
|
||||||
return sorted(_SKUS)
|
|
||||||
|
|
||||||
def convertProductListToSKUList(productList):
|
|
||||||
skuList = []
|
|
||||||
for productId in productList:
|
|
||||||
skuList += [(productId, skuId) for skuId in _SKUS if _SKUS[skuId]['product'] == productId]
|
|
||||||
return skuList
|
|
||||||
|
|
||||||
def getAllSKUs():
|
|
||||||
return convertProductListToSKUList(sorted(_PRODUCTS))
|
|
||||||
|
|
||||||
def getGSuiteSKUs():
|
|
||||||
return convertProductListToSKUList(['Google-Apps', '101031'])
|
|
||||||
@@ -1,287 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM user properties
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# notes
|
|
||||||
# a|b|c
|
|
||||||
# getKeywordAttribute(CUSTOM_TYPE_NOCUSTOM, attrdict)
|
|
||||||
|
|
||||||
#CUSTOM_TYPE_NOCUSTOM = {
|
|
||||||
# PTKW_CL_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_CL_CUSTOM_KEYWORD: None,
|
|
||||||
# PTKW_ATTR_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_ATTR_TYPE_CUSTOM_VALUE: None,
|
|
||||||
# PTKW_ATTR_CUSTOMTYPE_KEYWORD: None,
|
|
||||||
# PTKW_KEYWORD_LIST: ['a', 'b', 'c']
|
|
||||||
# }
|
|
||||||
|
|
||||||
# addresses, ims
|
|
||||||
# type a|b|c|([custom] <String>)
|
|
||||||
# getChoice([CUSTOM_TYPE_CUSTOM[PTKW_CL_TYPE_KEYWORD]])
|
|
||||||
# getKeywordAttribute(CUSTOM_TYPE_CUSTOM, attrdict)
|
|
||||||
|
|
||||||
# emails, externalids, relations, websites
|
|
||||||
# [type] a|b|c|([custom] <String>)
|
|
||||||
# getChoice([CUSTOM_TYPE_CUSTOM[PTKW_CL_TYPE_KEYWORD]], defaultChoice=None)
|
|
||||||
# getKeywordAttribute(CUSTOM_TYPE_IMPLICIT, attrdict)
|
|
||||||
|
|
||||||
# locations, phones
|
|
||||||
# type a|b|c|([custom] <String>)
|
|
||||||
# if argument == CUSTOM_TYPE_CUSTOM[PTKW_CL_TYPE_KEYWORD]:
|
|
||||||
# getKeywordAttribute(CUSTOM_TYPE_CUSTOM, attrdict)
|
|
||||||
|
|
||||||
#CUSTOM_TYPE_CUSTOM = {
|
|
||||||
# PTKW_CL_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
# PTKW_ATTR_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom',
|
|
||||||
# PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
# PTKW_KEYWORD_LIST: ['custom', 'a', 'b', 'c']
|
|
||||||
# }
|
|
||||||
|
|
||||||
# organizations
|
|
||||||
# (type a|b|c|([custom] <String>)) | (custom_type <String>)
|
|
||||||
# if argument == CUSTOM_TYPE_DIFFERENT_KEYWORD[PTKW_CL_TYPE_KEYWORD]:
|
|
||||||
# getKeywordAttribute(CUSTOM_TYPE_DIFFERENT_KEYWORD, attrdict)
|
|
||||||
# elif argument == CUSTOM_TYPE_DIFFERENT_KEYWORD[PTKW_CL_CUSTOM_KEYWORD]:
|
|
||||||
# attrdict[CUSTOM_TYPE_DIFFERENT_KEYWORD[PTKW_ATTR_CUSTOMTYPE_KEYWORD]] = getValue()
|
|
||||||
|
|
||||||
#CUSTOM_TYPE_DIFFERENT_KEYWORD = {
|
|
||||||
# PTKW_CL_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
# PTKW_CL_CUSTOMTYPE_KEYWORD: 'custom_type',
|
|
||||||
# PTKW_ATTR_TYPE_KEYWORD: 'type',
|
|
||||||
# PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom',
|
|
||||||
# PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
# PTKW_KEYWORD_LIST: ['custom', 'a', 'b', 'c']
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Keys into USER_PROPERTIES
|
|
||||||
CLASS = 'clas'
|
|
||||||
TITLE = 'titl'
|
|
||||||
TYPE_KEYWORDS = 'tykw'
|
|
||||||
PTKW_CL_TYPE_KEYWORD = 'ctkw'
|
|
||||||
PTKW_CL_CUSTOM_KEYWORD = 'ccuk'
|
|
||||||
PTKW_CL_CUSTOMTYPE_KEYWORD = 'cctk'
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD = 'atkw'
|
|
||||||
PTKW_ATTR_TYPE_CUSTOM_VALUE = 'atcv'
|
|
||||||
PTKW_ATTR_CUSTOMTYPE_KEYWORD = 'actk'
|
|
||||||
PTKW_KEYWORD_LIST = 'kwli'
|
|
||||||
#
|
|
||||||
PC_ADDRESSES = 'addr'
|
|
||||||
PC_ALIASES = 'alia'
|
|
||||||
PC_ARRAY = 'arry'
|
|
||||||
PC_BOOLEAN = 'bool'
|
|
||||||
PC_EMAILS = 'emai'
|
|
||||||
PC_GENDER = 'gndr'
|
|
||||||
PC_IMS = 'ims '
|
|
||||||
PC_LANGUAGES = 'lang'
|
|
||||||
PC_LOCATIONS = 'loca'
|
|
||||||
PC_NAME = 'name'
|
|
||||||
PC_NOTES = 'note'
|
|
||||||
PC_ORGANIZATIONS = 'orga'
|
|
||||||
PC_POSIX = 'posi'
|
|
||||||
PC_SCHEMAS = 'schm'
|
|
||||||
PC_SSH = 'ssh '
|
|
||||||
PC_STRING = 'stri'
|
|
||||||
PC_TIME = 'time'
|
|
||||||
|
|
||||||
PROPERTIES = {
|
|
||||||
'primaryEmail':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'User',},
|
|
||||||
'name':
|
|
||||||
{CLASS: PC_NAME, TITLE: 'Name',},
|
|
||||||
'givenName':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'First Name',},
|
|
||||||
'familyName':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Last Name',},
|
|
||||||
'fullName':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Full Name',},
|
|
||||||
'displayName':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Display Name',},
|
|
||||||
'primaryGuestEmail':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Primary Guest Email',},
|
|
||||||
'languages':
|
|
||||||
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
|
||||||
'languageCode':
|
|
||||||
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
|
||||||
'customLanguage':
|
|
||||||
{CLASS: PC_LANGUAGES, TITLE: 'Custom Languages',},
|
|
||||||
'password':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Password',},
|
|
||||||
'hashFunction':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Hash Function',},
|
|
||||||
'isAdmin':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
|
|
||||||
'isDelegatedAdmin':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
|
|
||||||
'isGuestUser':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is a Guest User',},
|
|
||||||
'isEnrolledIn2Sv':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
|
|
||||||
'isEnforcedIn2Sv':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: '2-step enforced',},
|
|
||||||
'agreedToTerms':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Has Agreed to Terms',},
|
|
||||||
'ipWhitelisted':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'IP Whitelisted',},
|
|
||||||
'archived':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Archived',},
|
|
||||||
'archivalTime':
|
|
||||||
{CLASS: PC_TIME, TITLE: 'Archival Time',},
|
|
||||||
'suspended':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Account Suspended',},
|
|
||||||
'suspensionReason':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Suspension Reason',},
|
|
||||||
'suspensionTime':
|
|
||||||
{CLASS: PC_TIME, TITLE: 'Suspension Time',},
|
|
||||||
'changePasswordAtNextLogin':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Must Change Password',},
|
|
||||||
'recoveryEmail':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Recovery Email',},
|
|
||||||
'recoveryPhone':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Recovery Phone',},
|
|
||||||
'id':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Google Unique ID',},
|
|
||||||
'customerId':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Customer ID',},
|
|
||||||
'isMailboxSetup':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Mailbox is setup',},
|
|
||||||
'includeInGlobalAddressList':
|
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Included in GAL',},
|
|
||||||
'creationTime':
|
|
||||||
{CLASS: PC_TIME, TITLE: 'Creation Time',},
|
|
||||||
'lastLoginTime':
|
|
||||||
{CLASS: PC_TIME, TITLE: 'Last login time',},
|
|
||||||
'deletionTime':
|
|
||||||
{CLASS: PC_TIME, TITLE: 'Deletion Time',},
|
|
||||||
'orgUnitPath':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Google Org Unit Path',},
|
|
||||||
'thumbnailPhotoUrl':
|
|
||||||
{CLASS: PC_STRING, TITLE: 'Photo URL',},
|
|
||||||
'addresses':
|
|
||||||
{CLASS: PC_ADDRESSES, TITLE: 'Addresses',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'other', 'work'],},},
|
|
||||||
'emails':
|
|
||||||
{CLASS: PC_EMAILS, TITLE: 'Other Emails',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'other', 'work'],},},
|
|
||||||
'externalIds':
|
|
||||||
{CLASS: PC_ARRAY, TITLE: 'External IDs',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'account', 'customer', 'login_id', 'network', 'organization'],},},
|
|
||||||
'gender':
|
|
||||||
{CLASS: PC_GENDER, TITLE: 'Gender',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'other',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'other', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customGender',
|
|
||||||
PTKW_KEYWORD_LIST: ['male', 'female', 'other', 'unknown'],},},
|
|
||||||
'ims':
|
|
||||||
{CLASS: PC_IMS, TITLE: 'IMs',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'other', 'work'],},},
|
|
||||||
'keywords':
|
|
||||||
{CLASS: PC_ARRAY, TITLE: 'Keywords',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'mission', 'occupation', 'outlook'],},},
|
|
||||||
'locations':
|
|
||||||
{CLASS: PC_LOCATIONS, TITLE: 'Locations',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'default', 'desk'],},},
|
|
||||||
'notes':
|
|
||||||
{CLASS: PC_NOTES, TITLE: 'Notes',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: None,
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'contentType', PTKW_ATTR_TYPE_CUSTOM_VALUE: None, PTKW_ATTR_CUSTOMTYPE_KEYWORD: None,
|
|
||||||
PTKW_KEYWORD_LIST: ['text_plain', 'text_html'],},},
|
|
||||||
'organizations':
|
|
||||||
{CLASS: PC_ORGANIZATIONS, TITLE: 'Organizations',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom', PTKW_CL_CUSTOMTYPE_KEYWORD: 'customtype',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: None, PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'domain_only', 'school', 'unknown', 'work'],},},
|
|
||||||
'phones':
|
|
||||||
{CLASS: PC_ARRAY, TITLE: 'Phones',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'work', 'other',
|
|
||||||
'home_fax', 'work_fax', 'other_fax',
|
|
||||||
'mobile', 'pager',
|
|
||||||
'company_main', 'assistant',
|
|
||||||
'car', 'radio', 'isdn', 'callback',
|
|
||||||
'telex', 'tty_tdd', 'work_mobile',
|
|
||||||
'work_pager', 'main', 'grand_central'],},},
|
|
||||||
'posixAccounts':
|
|
||||||
{CLASS: PC_POSIX, TITLE: 'Posix Accounts',},
|
|
||||||
'relations':
|
|
||||||
{CLASS: PC_ARRAY, TITLE: 'Relations',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'spouse', 'child', 'mother',
|
|
||||||
'father', 'parent', 'brother',
|
|
||||||
'sister', 'friend', 'relative',
|
|
||||||
'domestic_partner', 'partner',
|
|
||||||
'manager', 'dotted_line_manager',
|
|
||||||
'assistant', 'admin_assistant', 'exec_assistant',
|
|
||||||
'referred_by'],},},
|
|
||||||
'sshPublicKeys':
|
|
||||||
{CLASS: PC_SSH, TITLE: 'SSH Public Keys',},
|
|
||||||
'websites':
|
|
||||||
{CLASS: PC_ARRAY, TITLE: 'Websites',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'work',
|
|
||||||
'home_page', 'ftp', 'blog',
|
|
||||||
'profile', 'other', 'reservations',
|
|
||||||
'app_install_page', 'resume'],},},
|
|
||||||
'customSchemas':
|
|
||||||
{CLASS: PC_SCHEMAS, TITLE: 'Custom Schemas',
|
|
||||||
TYPE_KEYWORDS:
|
|
||||||
{PTKW_CL_TYPE_KEYWORD: 'type', PTKW_CL_CUSTOM_KEYWORD: 'custom',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'type', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customType',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom', 'home', 'other', 'work'],},},
|
|
||||||
'aliases': {
|
|
||||||
CLASS: PC_ALIASES, TITLE: 'Email Aliases',},
|
|
||||||
'nonEditableAliases': {
|
|
||||||
CLASS: PC_ALIASES, TITLE: 'NonEditable Aliases',},
|
|
||||||
}
|
|
||||||
#
|
|
||||||
IM_PROTOCOLS = {
|
|
||||||
PTKW_CL_TYPE_KEYWORD: 'protocol', PTKW_CL_CUSTOM_KEYWORD: 'custom_protocol',
|
|
||||||
PTKW_ATTR_TYPE_KEYWORD: 'protocol', PTKW_ATTR_TYPE_CUSTOM_VALUE: 'custom_protocol', PTKW_ATTR_CUSTOMTYPE_KEYWORD: 'customProtocol',
|
|
||||||
PTKW_KEYWORD_LIST: ['custom_protocol', 'aim', 'gtalk', 'icq', 'jabber', 'msn', 'net_meeting', 'qq', 'skype', 'xmpp', 'yahoo']
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
|
||||||
#
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
"""GAM extended library versions
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
GAM_VER_LIBS = [
|
|
||||||
'arrow',
|
|
||||||
'chardet',
|
|
||||||
'cryptography',
|
|
||||||
'filelock',
|
|
||||||
'google-api-python-client',
|
|
||||||
'google-auth-httplib2',
|
|
||||||
'google-auth-oauthlib',
|
|
||||||
'google-auth',
|
|
||||||
'lxml',
|
|
||||||
'httplib2',
|
|
||||||
'passlib',
|
|
||||||
'pathvalidate',
|
|
||||||
'pyscard',
|
|
||||||
'yubikey-manager',
|
|
||||||
]
|
|
||||||
Reference in New Issue
Block a user