gam7 7.8.0__py3-none-any.whl → 7.8.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gam7 might be problematic. Click here for more details.

gam/__init__.py CHANGED
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.08.00'
28
+ __version__ = '7.08.02'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -12338,7 +12338,7 @@ def checkServiceAccount(users):
12338
12338
  invalidOauth2serviceJsonExit(f'Authentication{auth_error}')
12339
12339
  _getSvcAcctData() # needed to read in GM.OAUTH2SERVICE_JSON_DATA
12340
12340
  if GM.Globals[GM.SVCACCT_SCOPES_DEFINED] and API.IAM not in GM.Globals[GM.SVCACCT_SCOPES]:
12341
- GM.Globals[GM.SVCACCT_SCOPES][API.IAM] = [API.CLOUD_PLATFORM_SCOPE]
12341
+ GM.Globals[GM.SVCACCT_SCOPES][API.IAM] = [API.IAM_SCOPE]
12342
12342
  key_type = GM.Globals[GM.OAUTH2SERVICE_JSON_DATA].get('key_type', 'default')
12343
12343
  if key_type == 'default':
12344
12344
  printMessage(Msg.SERVICE_ACCOUNT_CHECK_PRIVATE_KEY_AGE)
@@ -66053,7 +66053,9 @@ def doPrintShowSharedDriveACLs():
66053
66053
  PRINT_ORGANIZER_TYPES = {'group', 'user'}
66054
66054
 
66055
66055
  # gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
66056
- # [adminaccess|asadmin] [shareddriveadminquery|query <QuerySharedDrive>]
66056
+ # [adminaccess|asadmin]
66057
+ # [(shareddriveadminquery|query <QuerySharedDrive>) |
66058
+ # (shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
66057
66059
  # [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
66058
66060
  # [domainlist <DomainList>]
66059
66061
  # [includetypes user|group]
@@ -66068,16 +66070,24 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66068
66070
  includeTypes = set()
66069
66071
  showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
66070
66072
  fieldsList = ['role', 'type', 'emailAddress']
66071
- cd = orgUnitId = query = matchPattern = None
66072
- domainList = []
66073
- oneOrganizer = False
66073
+ cd = entityList = orgUnitId = query = matchPattern = None
66074
+ domainList = [GC.Values[GC.DOMAIN]]
66075
+ oneOrganizer = True
66074
66076
  while Cmd.ArgumentsRemaining():
66075
66077
  myarg = getArgument()
66076
66078
  if csvPF and myarg == 'todrive':
66077
66079
  csvPF.GetTodriveParameters()
66078
66080
  elif myarg == 'delimiter':
66079
66081
  delimiter = getCharacter()
66082
+ elif myarg in {'shareddrive', 'shareddrives', 'teamdrive', 'teamdrives'}:
66083
+ sharedDriveArg = myarg
66084
+ itemList = getString(Cmd.OB_SHAREDDRIVE_ID_LIST)
66085
+ if itemList != 'select':
66086
+ entityList = itemList.replace(',', ' ').split()
66087
+ else:
66088
+ entityList = getEntityList(Cmd.OB_SHAREDDRIVE_ID_LIST)
66080
66089
  elif myarg in {'teamdriveadminquery', 'shareddriveadminquery', 'query'}:
66090
+ queryArg = myarg
66081
66091
  queryLocation = Cmd.Location()
66082
66092
  query = getString(Cmd.OB_QUERY, minLen=0) or None
66083
66093
  if query:
@@ -66094,7 +66104,7 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66094
66104
  elif myarg in ADMIN_ACCESS_OPTIONS:
66095
66105
  useDomainAdminAccess = True
66096
66106
  elif myarg == 'domainlist':
66097
- domainList = set(getString(Cmd.OB_DOMAIN_NAME_LIST).replace(',', ' ').lower().split())
66107
+ domainList = set(getString(Cmd.OB_DOMAIN_NAME_LIST, minLen=0).replace(',', ' ').lower().split())
66098
66108
  elif myarg == 'includetypes':
66099
66109
  for itype in getString(Cmd.OB_ORGANIZER_TYPE_LIST).lower().replace(',', ' ').split():
66100
66110
  if itype in PRINT_ORGANIZER_TYPES:
@@ -66110,16 +66120,20 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66110
66120
  roles.add('fileOrganizer')
66111
66121
  else:
66112
66122
  unknownArgumentExit()
66113
- if query and not useDomainAdminAccess:
66114
- Cmd.SetLocation(queryLocation-1)
66115
- usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_PERFORM_SHARED_DRIVE_QUERIES)
66123
+ if query:
66124
+ if not useDomainAdminAccess:
66125
+ Cmd.SetLocation(queryLocation-1)
66126
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_PERFORM_SHARED_DRIVE_QUERIES)
66127
+ if entityList:
66128
+ Cmd.SetLocation(queryLocation-1)
66129
+ usageErrorExit(Msg.ARE_MUTUALLY_EXCLUSIVE.format(queryArg, sharedDriveArg))
66116
66130
  if orgUnitId is not None:
66117
66131
  if not useDomainAdminAccess:
66118
66132
  Cmd.SetLocation(orgLocation-1)
66119
66133
  usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_SPECIFY_SHARED_DRIVE_ORGUNIT)
66120
66134
  csvPF.AddTitles(['orgUnit', 'orgUnitId'])
66121
66135
  if not includeTypes:
66122
- includeTypes = PRINT_ORGANIZER_TYPES
66136
+ includeTypes = set(['user'])
66123
66137
  fields = getItemFieldsFromFieldsList('permissions', fieldsList, True)
66124
66138
  i, count, users = getEntityArgument(users)
66125
66139
  for user in users:
@@ -66127,28 +66141,46 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66127
66141
  user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count)
66128
66142
  if not drive:
66129
66143
  continue
66130
- if useDomainAdminAccess:
66131
- printGettingAllAccountEntities(Ent.SHAREDDRIVE, query)
66132
- pageMessage = getPageMessage()
66144
+ if entityList is None:
66145
+ if useDomainAdminAccess:
66146
+ printGettingAllAccountEntities(Ent.SHAREDDRIVE, query)
66147
+ pageMessage = getPageMessage()
66148
+ else:
66149
+ printGettingAllEntityItemsForWhom(Ent.SHAREDDRIVE, user, i, count, query)
66150
+ pageMessage = getPageMessageForWhom()
66151
+ try:
66152
+ feed = callGAPIpages(drive.drives(), 'list', 'drives',
66153
+ pageMessage=pageMessage,
66154
+ throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.INVALID_QUERY, GAPI.INVALID,
66155
+ GAPI.QUERY_REQUIRES_ADMIN_CREDENTIALS,
66156
+ GAPI.NO_LIST_TEAMDRIVES_ADMINISTRATOR_PRIVILEGE,
66157
+ GAPI.FILE_NOT_FOUND],
66158
+ q=query, useDomainAdminAccess=useDomainAdminAccess,
66159
+ fields='nextPageToken,drives(id,name,createdTime,orgUnitId)', pageSize=100)
66160
+ except (GAPI.invalidQuery, GAPI.invalid, GAPI.queryRequiresAdminCredentials,
66161
+ GAPI.noListTeamDrivesAdministratorPrivilege, GAPI.fileNotFound) as e:
66162
+ entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, None], str(e), i, count)
66163
+ continue
66164
+ except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
66165
+ userDriveServiceNotEnabledWarning(user, str(e), i, count)
66166
+ continue
66133
66167
  else:
66134
- printGettingAllEntityItemsForWhom(Ent.SHAREDDRIVE, user, i, count, query)
66135
- pageMessage = getPageMessageForWhom()
66136
- try:
66137
- feed = callGAPIpages(drive.drives(), 'list', 'drives',
66138
- pageMessage=pageMessage,
66139
- throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.INVALID_QUERY, GAPI.INVALID,
66140
- GAPI.QUERY_REQUIRES_ADMIN_CREDENTIALS,
66141
- GAPI.NO_LIST_TEAMDRIVES_ADMINISTRATOR_PRIVILEGE,
66142
- GAPI.FILE_NOT_FOUND],
66143
- q=query, useDomainAdminAccess=useDomainAdminAccess,
66144
- fields='nextPageToken,drives(id,name,createdTime,orgUnitId)', pageSize=100)
66145
- except (GAPI.invalidQuery, GAPI.invalid, GAPI.queryRequiresAdminCredentials,
66146
- GAPI.noListTeamDrivesAdministratorPrivilege, GAPI.fileNotFound) as e:
66147
- entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE, None], str(e), i, count)
66148
- continue
66149
- except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
66150
- userDriveServiceNotEnabledWarning(user, str(e), i, count)
66151
- continue
66168
+ feed = []
66169
+ jcount = len(entityList)
66170
+ j = 0
66171
+ for driveId in entityList:
66172
+ j +=1
66173
+ try:
66174
+ feed.append(callGAPI(drive.drives(), 'get',
66175
+ throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND],
66176
+ useDomainAdminAccess=useDomainAdminAccess,
66177
+ driveId=driveId, fields='id,name,createdTime,orgUnitId'))
66178
+ except (GAPI.fileNotFound, GAPI.notFound) as e:
66179
+ entityActionNotPerformedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, driveId], str(e), j, jcount)
66180
+ continue
66181
+ except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
66182
+ userDriveServiceNotEnabledWarning(user, str(e), i, count)
66183
+ break
66152
66184
  matchFeed = []
66153
66185
  jcount = len(feed)
66154
66186
  j = 0
gam/gamlib/glapi.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- # Copyright (C) 2024 Ross Scroggs All Rights Reserved.
3
+ # Copyright (C) 2025 Ross Scroggs All Rights Reserved.
4
4
  #
5
5
  # All Rights Reserved.
6
6
  #
@@ -596,7 +596,7 @@ _SVCACCT_SCOPES = [
596
596
  {'name': 'Cloud Identity Devices API',
597
597
  'api': CLOUDIDENTITY_DEVICES,
598
598
  'subscopes': READONLY,
599
- 'scope': 'https://www.googleapis.com/auth/cloud-identity'},
599
+ 'scope': 'https://www.googleapis.com/auth/cloud-identity.devices'},
600
600
  # {'name': 'Cloud Identity User Invitations API',
601
601
  # 'api': CLOUDIDENTITY_USERINVITATIONS,
602
602
  # 'subscopes': READONLY,
@@ -647,8 +647,9 @@ _SVCACCT_SCOPES = [
647
647
  'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
648
648
  {'name': 'Identity and Access Management API',
649
649
  'api': IAM,
650
+ 'offByDefault': True,
650
651
  'subscopes': [],
651
- 'scope': CLOUD_PLATFORM_SCOPE},
652
+ 'scope': IAM_SCOPE},
652
653
  {'name': 'Keep API',
653
654
  'api': KEEP,
654
655
  'subscopes': READONLY,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.8.0
3
+ Version: 7.8.2
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -1,4 +1,4 @@
1
- gam/__init__.py,sha256=SdaM0sI4IUxepULX1otTVVcG88zMq-P9crfuFa9te-4,3512307
1
+ gam/__init__.py,sha256=bWbA30929W_vQxV1tytxhtjfUFGf9rzhVHWqNrUgUh4,3513784
2
2
  gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
3
3
  gam/cacerts.pem,sha256=82Ak7btW_2XvocLUvAwPmpx8Chi0oqtZUG1gseLK_t4,50235
4
4
  gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
@@ -23,7 +23,7 @@ gam/atom/token_store.py,sha256=7E6Ecvxa86WCvl1pJAhv78jg9OxQv8pMtIUcPhZCq04,3803
23
23
  gam/atom/url.py,sha256=pxO1TlORxyKQTQ1bkBE1unFzjnv9c8LjJkm-UEORShY,4276
24
24
  gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
25
25
  gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
26
- gam/gamlib/glapi.py,sha256=85YwZ5LhBoVd9kU3m-gwLRq8FwTWCaRIwARuQvH8Mjc,34022
26
+ gam/gamlib/glapi.py,sha256=1P5QD850Fza_huThuNzgUAuDinLHujY8EdqzXRs_De4,34044
27
27
  gam/gamlib/glcfg.py,sha256=eJCVb_OJ6cIsPuv-0IfIjHaTh5lM9juh4HOMLDblJmE,28055
28
28
  gam/gamlib/glclargs.py,sha256=zB6GMmDR_y5IRj7LuoM6-Bk_ETfNQ6sTqCNB6RdPfyg,42350
29
29
  gam/gamlib/glentity.py,sha256=fqWUlxQqPKlfFrkuPjCK2lZhhFBIZboCuO0qCxuEwqA,33691
@@ -65,8 +65,8 @@ gam/googleapiclient/discovery_cache/base.py,sha256=yCDPtxnbNN-p5_9fzBacC6P3wcUPl
65
65
  gam/googleapiclient/discovery_cache/file_cache.py,sha256=sim3Mg4HgRYo3vX75jvcKy_aV568EvIrtBfvfbw-044,4774
66
66
  gam/iso8601/__init__.py,sha256=Z2PsYbXgAH5a5xzUvgczCboPzqWpm65kRcIngCnhViU,1218
67
67
  gam/iso8601/iso8601.py,sha256=Li2FHZ4sBTWuthuQhyCvmvj0j6At8JbGzkSv2fc2RHU,4384
68
- gam7-7.8.0.dist-info/METADATA,sha256=FKc83O6Jgh-XAK2AfQacRZJ-uKLmzdWYcKmLkC26aNc,2977
69
- gam7-7.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.8.0.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.8.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.8.0.dist-info/RECORD,,
68
+ gam7-7.8.2.dist-info/METADATA,sha256=_MUs7ktcgVLE5GmS8U4Uc7xSu_IAn5cKMQ7Zqutn_Lg,2977
69
+ gam7-7.8.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.8.2.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.8.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.8.2.dist-info/RECORD,,
File without changes