diff --git a/src/GamUpdate.txt b/src/GamUpdate.txt index 31532cad..03dea3eb 100644 --- a/src/GamUpdate.txt +++ b/src/GamUpdate.txt @@ -1,3 +1,14 @@ +7.19.00 + +Eliminated `drive_v3_beta` and `meet_v2_beta` from `gam.cfg` as the API betas are no longer used. + +Updated `Meet API` scopes. +[*] 34) Meet API - Read Only +[*] 35) Meet API - Read Write + +`Meet API - Read Only` - Allow apps to read metadata about any meeting space the user has access to. +`Meet API - Read Write` - Allow apps to create, modify, and read metadata about meeting spaces *created by your app*. + 7.18.07 Updated `gam print drivelastmodification` to put `addcsvdata` columns diff --git a/src/gam/__init__.py b/src/gam/__init__.py index df703771..6d3ea0df 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki """ __author__ = 'GAM Team ' -__version__ = '7.18.07' +__version__ = '7.19.00' __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)' #pylint: disable=wrong-import-position @@ -4739,8 +4739,6 @@ def getAPIService(api, httpObj): discoveryServiceUrl=DISCOVERY_URIS[v2discovery], static_discovery=False) def getService(api, httpObj): -### Drive v3beta -# mapDriveURL = api == API.DRIVE3 and GC.Values[GC.DRIVE_V3_BETA] hasLocalJSON = API.hasLocalJSON(api) api, version, v2discovery = API.getVersion(api) if api in GM.Globals[GM.CURRENT_API_SERVICES] and version in GM.Globals[GM.CURRENT_API_SERVICES][api]: @@ -4756,9 +4754,6 @@ def getService(api, httpObj): discoveryServiceUrl=DISCOVERY_URIS[v2discovery], static_discovery=False) GM.Globals[GM.CURRENT_API_SERVICES].setdefault(api, {}) GM.Globals[GM.CURRENT_API_SERVICES][api][version] = service._rootDesc.copy() -### Drive v3beta -# if mapDriveURL: -# setattr(service, '_baseUrl', getattr(service, '_baseUrl').replace('/v3/', '/v3beta/')) if GM.Globals[GM.CACHE_DISCOVERY_ONLY]: clearServiceCache(service) return service @@ -5615,8 +5610,6 @@ def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True): userEmail = getSaUser(user) httpObj = getHttpObj(cache=GM.Globals[GM.CACHE_DIR]) service = getService(api, httpObj) - if api == API.MEET_BETA: - api = API.MEET credentials = getSvcAcctCredentials(api, userEmail) request = transportCreateRequest(httpObj) triesLimit = 3 @@ -13628,6 +13621,7 @@ REPORT_CHOICE_MAP = { 'drive': 'drive', 'gcp': 'gcp', 'geminiinworkspaceapps': 'gemini_in_workspace_apps', + 'gmail': 'gmail', 'gplus': 'gplus', 'groups': 'groups', 'groupsenterprise': 'groups_enterprise', @@ -28239,9 +28233,7 @@ def printShowChatEvents(users): if csvPF: csvPF.writeCSVfile('Chat Events') -def buildMeetServiceObject(api=API.MEET, user=None, i=0, count=0, entityTypeList=None): - if GC.Values[GC.MEET_V2_BETA]: - api = API.MEET_BETA +def buildMeetServiceObject(api, user=None, i=0, count=0, entityTypeList=None): user, meet = buildGAPIServiceObject(api, user, i, count) kvList = [Ent.USER, user] if entityTypeList is not None: @@ -28420,7 +28412,7 @@ def infoMeetSpace(users): i, count, users = getEntityArgument(users) for user in users: i += 1 - user, meet, kvList = buildMeetServiceObject(API.MEET, user, i, count, [Ent.MEET_SPACE, name]) + user, meet, kvList = buildMeetServiceObject(API.MEET_READONLY, user, i, count, [Ent.MEET_SPACE, name]) if not meet: continue try: @@ -28530,7 +28522,7 @@ def printShowMeetConferences(users): i, count, users = getEntityArgument(users) for user in users: i += 1 - user, meet, kvList = buildMeetServiceObject(API.MEET, user, i, count, [Ent.MEET_CONFERENCE, None]) + user, meet, kvList = buildMeetServiceObject(API.MEET_READONLY, user, i, count, [Ent.MEET_CONFERENCE, None]) if not meet: continue try: @@ -28606,7 +28598,7 @@ def _printShowMeetItems(users, entityType): i, count, users = getEntityArgument(users) for user in users: i += 1 - user, meet, kvList = buildMeetServiceObject(API.MEET, user, i, count, [Ent.MEET_CONFERENCE, parent]) + user, meet, kvList = buildMeetServiceObject(API.MEET_READONLY, user, i, count, [Ent.MEET_CONFERENCE, parent]) if not meet: continue if entityType == Ent.MEET_PARTICIPANT: diff --git a/src/gam/gamlib/glapi.py b/src/gam/gamlib/glapi.py index 8a9affab..56933e89 100644 --- a/src/gam/gamlib/glapi.py +++ b/src/gam/gamlib/glapi.py @@ -76,7 +76,7 @@ KEEP = 'keep' LICENSING = 'licensing' LOOKERSTUDIO = 'datastudio' MEET = 'meet' -MEET_BETA = 'meetbeta' +MEET_READONLY = 'meetreadonly' OAUTH2 = 'oauth2' ORGPOLICY = 'orgpolicy' PEOPLE = 'people' @@ -267,8 +267,8 @@ _INFO = { 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: {'name': 'Meet API', 'version': 'v2', 'v2discovery': True}, - MEET_BETA: {'name': 'Meet API Beta', 'version': 'v2beta', 'v2discovery': True, 'localjson': True, 'mappedAPI': MEET}, + MEET: {'name': 'Meet API - Read Write', 'version': 'v2', 'v2discovery': True}, + MEET_READONLY: {'name': 'Meet API - Read Only', 'version': 'v2', 'v2discovery': True, 'mappedAPI': MEET}, 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}, @@ -689,11 +689,14 @@ _SVCACCT_SCOPES = [ 'api': LOOKERSTUDIO, 'subscopes': READONLY, 'scope': 'https://www.googleapis.com/auth/datastudio'}, - {'name': 'Meet API', + {'name': 'Meet API - Read Write', 'api': MEET, - 'subscopes': READONLY, - 'scope': 'https://www.googleapis.com/auth/meetings.space.created', - 'roscope': 'https://www.googleapis.com/auth/meetings.space.readonly'}, + 'subscopes': [], + 'scope': 'https://www.googleapis.com/auth/meetings.space.created'}, + {'name': 'Meet API - Read Only', + 'api': MEET_READONLY, + 'subscopes': [], + 'scope': 'https://www.googleapis.com/auth/meetings.space.readonly'}, {'name': 'OAuth2 API', 'api': OAUTH2, 'subscopes': [], @@ -844,4 +847,3 @@ def findAPIforScope(scopesList): if not requiredAPIs: requiredAPIs = scopesList return ' or '.join(requiredAPIs) - diff --git a/src/gam/gamlib/glcfg.py b/src/gam/gamlib/glcfg.py index 146ab370..8ae3fac2 100644 --- a/src/gam/gamlib/glcfg.py +++ b/src/gam/gamlib/glcfg.py @@ -153,8 +153,6 @@ DOMAIN = 'domain' 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' -# Use Drive V3 beta -DRIVE_V3_BETA = 'drive_v3_beta' # 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 @@ -177,8 +175,6 @@ INTER_BATCH_WAIT = 'inter_batch_wait' LICENSE_MAX_RESULTS = 'license_max_results' # License SKUs to process LICENSE_SKUS = 'license_skus' -# Use Meet V2 beta -MEET_V2_BETA = 'meet_v2_beta' # 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 @@ -379,7 +375,6 @@ Defaults = { DRIVE_DIR: '', ENFORCE_EXPANSIVE_ACCESS: TRUE, DRIVE_MAX_RESULTS: '1000', - DRIVE_V3_BETA: FALSE, EMAIL_BATCH_SIZE: '50', ENABLE_DASA: FALSE, ENABLE_GCLOUD_REAUTH: FALSE, @@ -390,7 +385,6 @@ Defaults = { INTER_BATCH_WAIT: '0', LICENSE_MAX_RESULTS: '100', LICENSE_SKUS: '', - MEET_V2_BETA: FALSE, MEMBER_MAX_RESULTS: '200', MEMBER_MAX_RESULTS_CI_BASIC: '1000', MEMBER_MAX_RESULTS_CI_FULL: '500', @@ -547,7 +541,6 @@ VAR_INFO = { DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'}, ENFORCE_EXPANSIVE_ACCESS: {VAR_TYPE: TYPE_BOOLEAN}, DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)}, - DRIVE_V3_BETA: {VAR_TYPE: TYPE_BOOLEAN}, 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}, @@ -558,7 +551,6 @@ VAR_INFO = { 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)}, - MEET_V2_BETA: {VAR_TYPE: TYPE_BOOLEAN}, 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)},