mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 18:01:36 +00:00
227 lines
13 KiB
Python
227 lines
13 KiB
Python
# -*- 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.
|
|
|
|
"""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': 'Beyond Corp Enterprise',
|
|
'101043': 'Google Workspace Additional Storage',
|
|
'101047': 'Duet AI',
|
|
'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'], 'displayName': 'Cloud Identity'},
|
|
'1010050001': {
|
|
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
|
'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)'},
|
|
'1010330003': {
|
|
'product': '101033', 'aliases': ['gvstarter', 'voicestarter', 'googlevoicestarter'], 'displayName': 'Google Voice Starter'},
|
|
'1010330004': {
|
|
'product': '101033', 'aliases': ['gvstandard', 'voicestandard', 'googlevoicestandard'], 'displayName': 'Google Voice Standard'},
|
|
'1010330002': {
|
|
'product': '101033', 'aliases': ['gvpremier', 'voicepremier', 'googlevoicepremier'], 'displayName': 'Google Voice Premier'},
|
|
'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'},
|
|
'1010400001': {
|
|
'product': '101040', 'aliases': ['beyondcorp', 'beyondcorpenterprise', 'bce'], 'displayName': 'Beyond Corp Enterprise'},
|
|
'1010430001': {
|
|
'product': '101043', 'aliases': ['gwas', 'plusstorage'], 'displayName': 'Google Workspace Additional Storage'},
|
|
'1010470001': {
|
|
'product': '101047', 'aliases': ['duetai'], 'displayName': 'Duet AI for Enterprise'},
|
|
'1010470002': {
|
|
'product': '101047', 'aliases': ['gwlabs', 'workspacelabs'], 'displayName': 'Google Workspace Labs'},
|
|
'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-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'},
|
|
'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'},
|
|
'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'},
|
|
'1010060001': {
|
|
'product': '101006', 'aliases': ['gsuiteessentials', 'essentials',
|
|
'd4e', 'driveenterprise', 'drive4enterprise',
|
|
'wsess', 'workspaceesentials'], 'displayName': 'Google Workspace Essentials'},
|
|
'1010060003': {
|
|
'product': 'Google-Apps', 'aliases': ['wsentess', 'workspaceenterpriseessentials'], 'displayName': 'Google Workspace Enterprise Essentials'},
|
|
'1010060005': {
|
|
'product': 'Google-Apps', 'aliases': ['wsessplus', 'workspaceessentialsplus'], 'displayName': 'Google Workspace 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'}
|
|
}
|
|
|
|
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'])
|