Ross Scroggs e95fcbaa38
Some checks failed
Build and test GAM / build (build, 1, Build Intel Ubuntu Jammy, ubuntu-22.04) (push) Has been cancelled
Build and test GAM / build (build, 10, Build Intel Windows, windows-2022) (push) Has been cancelled
Build and test GAM / build (build, 11, Build Arm Windows, windows-11-arm) (push) Has been cancelled
Build and test GAM / build (build, 2, Build Intel Ubuntu Noble, ubuntu-24.04) (push) Has been cancelled
Build and test GAM / build (build, 3, Build Arm Ubuntu Noble, ubuntu-24.04-arm) (push) Has been cancelled
Build and test GAM / build (build, 4, Build Arm Ubuntu Jammy, ubuntu-22.04-arm) (push) Has been cancelled
Build and test GAM / build (build, 5, Build Intel StaticX Legacy, ubuntu-22.04, yes) (push) Has been cancelled
Build and test GAM / build (build, 6, Build Arm StaticX Legacy, ubuntu-22.04-arm, yes) (push) Has been cancelled
Build and test GAM / build (build, 7, Build Intel MacOS, macos-13) (push) Has been cancelled
Build and test GAM / build (build, 8, Build Arm MacOS 14, macos-14) (push) Has been cancelled
Build and test GAM / build (build, 9, Build Arm MacOS 15, macos-15) (push) Has been cancelled
Build and test GAM / build (test, 12, Test Python 3.10, ubuntu-24.04, 3.10) (push) Has been cancelled
Build and test GAM / build (test, 13, Test Python 3.11, ubuntu-24.04, 3.11) (push) Has been cancelled
Build and test GAM / build (test, 14, Test Python 3.12, ubuntu-24.04, 3.12) (push) Has been cancelled
Build and test GAM / build (test, 15, Test Python 3.14-dev, ubuntu-24.04, 3.14-dev) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Check for Google Root CA Updates / check-apis (push) Has been cancelled
Push wiki / pushwiki (push) Has been cancelled
Build and test GAM / merge (push) Has been cancelled
Build and test GAM / publish (push) Has been cancelled
Deleted commands to display Analytic UA properties; the API has been deprecated.
2025-04-25 15:10:59 -07:00

826 lines
33 KiB
Python

# -*- coding: utf-8 -*-
# Copyright (C) 2024 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'
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'
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_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_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_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_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_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'
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'
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'
NOTE = 'note'
NOTE_ACL = 'nota'
NOTES_ACLS = 'naac'
NONEDITABLE_ALIAS = 'neal'
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 = 'src'
SPREADSHEET = 'sprd'
SPREADSHEET_RANGE = 'ssrn'
START_TIME = 'strt'
STATUS = 'stat'
STUDENT = 'stud'
SUBSCRIPTION = 'subs'
SVCACCT = 'svac'
SVCACCT_KEY = 'svky'
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_EMAIL = 'uema'
USER_INVITATION = 'uinv'
USER_NOT_SUSPENDED = 'uns'
USER_SCHEMA = 'usch'
USER_SUSPENDED = 'usup'
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'
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'],
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'],
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_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_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_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_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_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'],
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'],
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'],
NOTE: ['Notes', 'Note'],
NOTE_ACL: ['Note ACLs', 'Note ACL'],
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
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'],
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_EMAIL: ['User Emails', 'User Email'],
USER_INVITATION: ['User Invitations', 'User Invitation'],
USER_NOT_SUSPENDED: ['Users (Not suspended)', 'User (Not suspended)'],
USER_SCHEMA: ['Schemas', 'Schema'],
USER_SUSPENDED: ['Users (Suspended)', 'User (Suspended)'],
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'],
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'],
}
def __init__(self):
self.entityType = None
self.forWhom = None
self.preQualifier = ''
self.postQualifier = ''
def SetGetting(self, entityType):
self.entityType = entityType
self.preQualifier = self.postQualifier = ''
def SetGettingQuery(self, entityType, query):
self.entityType = entityType
self.preQualifier = f' that match query ({query})'
self.postQualifier = f' that matched query ({query})'
def SetGettingQualifier(self, entityType, qualifier):
self.entityType = entityType
self.preQualifier = self.postQualifier = qualifier
def Getting(self):
return self.entityType
def GettingPreQualifier(self):
return self.preQualifier
def GettingPostQualifier(self):
return self.postQualifier
def SetGettingForWhom(self, forWhom):
self.forWhom = forWhom
def GettingForWhom(self):
return self.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[self.entityType][0]
def Singular(self, entityType):
return self._NAMES[entityType][1]
def SingularGetting(self):
return self._NAMES[self.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}'