gam7 7.7.17__py3-none-any.whl → 7.8.1__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.07.17'
28
+ __version__ = '7.08.01'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -17102,11 +17102,11 @@ DATA_TRANSFER_SORT_TITLES = ['id', 'requestTime', 'oldOwnerUserEmail', 'newOwner
17102
17102
 
17103
17103
  # gam print datatransfers|transfers [todrive <ToDriveAttribute>*]
17104
17104
  # [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
17105
- # [status <String>] [delimiter <Character>]]
17105
+ # [status <String>] [delimiter <Character>]
17106
17106
  # (addcsvdata <FieldName> <String>)*
17107
17107
  # gam show datatransfers|transfers
17108
17108
  # [olduser|oldowner <UserItem>] [newuser|newowner <UserItem>]
17109
- # [status <String>] [delimiter <Character>]]
17109
+ # [status <String>] [delimiter <Character>]
17110
17110
  def doPrintShowDataTransfers():
17111
17111
  dt = buildGAPIObject(API.DATATRANSFER)
17112
17112
  apps = getTransferApplications(dt)
@@ -66050,6 +66050,191 @@ def printShowSharedDriveACLs(users, useDomainAdminAccess=False):
66050
66050
  def doPrintShowSharedDriveACLs():
66051
66051
  printShowSharedDriveACLs([_getAdminEmail()], True)
66052
66052
 
66053
+ PRINT_ORGANIZER_TYPES = {'group', 'user'}
66054
+
66055
+ # gam [<UserTypeEntity>] print shareddriveorganizers [todrive <ToDriveAttribute>*]
66056
+ # [adminaccess|asadmin]
66057
+ # [(shareddriveadminquery|query <QuerySharedDrive>) |
66058
+ # (shareddrives|teamdrives (<SharedDriveIDList>|(select <FileSelector>|<CSVFileSelector>)))]
66059
+ # [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
66060
+ # [domainlist <DomainList>]
66061
+ # [includetypes user|group]
66062
+ # [oneorganizer [<Boolean>]]
66063
+ # [shownorganizerdrives false|true|only]
66064
+ # [includefileorganizers [<Boolean>]]
66065
+ # [delimiter <Character>]
66066
+ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66067
+ csvPF = CSVPrintFile(['id', 'name', 'organizers', 'createdTime'], 'sortall')
66068
+ delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
66069
+ roles = set(['organizer'])
66070
+ includeTypes = set()
66071
+ showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
66072
+ fieldsList = ['role', 'type', 'emailAddress']
66073
+ cd = entityList = orgUnitId = query = matchPattern = None
66074
+ domainList = []
66075
+ oneOrganizer = False
66076
+ while Cmd.ArgumentsRemaining():
66077
+ myarg = getArgument()
66078
+ if csvPF and myarg == 'todrive':
66079
+ csvPF.GetTodriveParameters()
66080
+ elif myarg == 'delimiter':
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)
66089
+ elif myarg in {'teamdriveadminquery', 'shareddriveadminquery', 'query'}:
66090
+ queryArg = myarg
66091
+ queryLocation = Cmd.Location()
66092
+ query = getString(Cmd.OB_QUERY, minLen=0) or None
66093
+ if query:
66094
+ query = mapQueryRelativeTimes(query, ['createdTime'])
66095
+ elif myarg == 'matchname':
66096
+ matchPattern = getREPattern(re.IGNORECASE)
66097
+ elif myarg in {'ou', 'org', 'orgunit'}:
66098
+ orgLocation = Cmd.Location()
66099
+ if cd is None:
66100
+ cd = buildGAPIObject(API.DIRECTORY)
66101
+ orgUnitPath, orgUnitId = getOrgUnitId(cd)
66102
+ orgUnitId = orgUnitId[3:]
66103
+ orgUnitInfo = {'orgUnit': orgUnitPath, 'orgUnitId': orgUnitId}
66104
+ elif myarg in ADMIN_ACCESS_OPTIONS:
66105
+ useDomainAdminAccess = True
66106
+ elif myarg == 'domainlist':
66107
+ domainList = set(getString(Cmd.OB_DOMAIN_NAME_LIST).replace(',', ' ').lower().split())
66108
+ elif myarg == 'includetypes':
66109
+ for itype in getString(Cmd.OB_ORGANIZER_TYPE_LIST).lower().replace(',', ' ').split():
66110
+ if itype in PRINT_ORGANIZER_TYPES:
66111
+ includeTypes.add(itype)
66112
+ else:
66113
+ invalidChoiceExit(itype, PRINT_ORGANIZER_TYPES, True)
66114
+ elif myarg == 'oneorganizer':
66115
+ oneOrganizer = getBoolean()
66116
+ elif myarg == 'shownoorganizerdrives':
66117
+ showNoOrganizerDrives = getChoice(SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP, defaultChoice=1, mapChoice=True)
66118
+ elif myarg in {'includefileorganizers', 'includecontentmanagers'}:
66119
+ if getBoolean():
66120
+ roles.add('fileOrganizer')
66121
+ else:
66122
+ unknownArgumentExit()
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))
66130
+ if orgUnitId is not None:
66131
+ if not useDomainAdminAccess:
66132
+ Cmd.SetLocation(orgLocation-1)
66133
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_SPECIFY_SHARED_DRIVE_ORGUNIT)
66134
+ csvPF.AddTitles(['orgUnit', 'orgUnitId'])
66135
+ if not includeTypes:
66136
+ includeTypes = PRINT_ORGANIZER_TYPES
66137
+ fields = getItemFieldsFromFieldsList('permissions', fieldsList, True)
66138
+ i, count, users = getEntityArgument(users)
66139
+ for user in users:
66140
+ i += 1
66141
+ user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count)
66142
+ if not drive:
66143
+ continue
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
66167
+ else:
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
66184
+ matchFeed = []
66185
+ jcount = len(feed)
66186
+ j = 0
66187
+ for shareddrive in feed:
66188
+ j += 1
66189
+ if ((matchPattern is not None and matchPattern.match(shareddrive['name']) is None) or
66190
+ (orgUnitId is not None and orgUnitId != shareddrive.get('orgUnitId'))):
66191
+ continue
66192
+ printGettingAllEntityItemsForWhom(Ent.PERMISSION, shareddrive['name'], j, jcount)
66193
+ shareddrive['createdTime'] = formatLocalTime(shareddrive['createdTime'])
66194
+ shareddrive['organizers'] = []
66195
+ try:
66196
+ permissions = callGAPIpages(drive.permissions(), 'list', 'permissions',
66197
+ pageMessage=getPageMessageForWhom(),
66198
+ throwReasons=GAPI.DRIVE3_GET_ACL_REASONS,
66199
+ retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
66200
+ useDomainAdminAccess=useDomainAdminAccess,
66201
+ fileId=shareddrive['id'], fields=fields, supportsAllDrives=True)
66202
+ for permission in permissions:
66203
+ if permission['type'] in includeTypes and permission['role'] in roles:
66204
+ if domainList:
66205
+ _, domain = permission['emailAddress'].lower().split('@', 1)
66206
+ if domain not in domainList:
66207
+ continue
66208
+ shareddrive['organizers'].append(permission['emailAddress'])
66209
+ if oneOrganizer:
66210
+ break
66211
+ if not shareddrive['organizers']:
66212
+ if showNoOrganizerDrives == 0: # no organizers and showNoOrganizerDrives False - ignore
66213
+ continue
66214
+ matchFeed.append(shareddrive) # no organizers and showNoOrganizerDrives Only/True - keep
66215
+ continue
66216
+ if showNoOrganizerDrives < 0: # organizers and showNoOrganizerDrives Only/True - ignore
66217
+ continue
66218
+ matchFeed.append(shareddrive)
66219
+ except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
66220
+ GAPI.insufficientAdministratorPrivileges, GAPI.insufficientFilePermissions,
66221
+ GAPI.unknownError, GAPI.invalid):
66222
+ pass
66223
+ if len(matchFeed) == 0:
66224
+ setSysExitRC(NO_ENTITIES_FOUND_RC)
66225
+ for shareddrive in matchFeed:
66226
+ row = {'id': shareddrive['id'], 'name': shareddrive['name'],
66227
+ 'organizers': delimiter.join(shareddrive['organizers']),
66228
+ 'createdTime': shareddrive['createdTime']}
66229
+ if orgUnitId:
66230
+ row.update(orgUnitInfo)
66231
+ csvPF.WriteRowTitles(row)
66232
+ if csvPF:
66233
+ csvPF.writeCSVfile('SharedDrive Organizers')
66234
+
66235
+ def doPrintSharedDriveOrganizers():
66236
+ printSharedDriveOrganizers([_getAdminEmail()], True)
66237
+
66053
66238
  LOOKERSTUDIO_ASSETTYPE_CHOICE_MAP = {
66054
66239
  'report': ['REPORT'],
66055
66240
  'datasource': ['DATA_SOURCE'],
@@ -75936,6 +76121,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
75936
76121
  Cmd.ARG_SCHEMA: doPrintShowUserSchemas,
75937
76122
  Cmd.ARG_SHAREDDRIVE: doPrintShowSharedDrives,
75938
76123
  Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
76124
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: doPrintSharedDriveOrganizers,
75939
76125
  Cmd.ARG_SITE: deprecatedDomainSites,
75940
76126
  Cmd.ARG_SITEACL: deprecatedDomainSites,
75941
76127
  Cmd.ARG_SITEACTIVITY: deprecatedDomainSites,
@@ -76284,6 +76470,7 @@ MAIN_COMMANDS_OBJ_ALIASES = {
76284
76470
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
76285
76471
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
76286
76472
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
76473
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
76287
76474
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
76288
76475
  Cmd.ARG_TOKENS: Cmd.ARG_TOKEN,
76289
76476
  Cmd.ARG_TRANSFER: Cmd.ARG_DATATRANSFER,
@@ -76976,6 +77163,7 @@ USER_COMMANDS_WITH_OBJECTS = {
76976
77163
  Cmd.ARG_SENDAS: printShowSendAs,
76977
77164
  Cmd.ARG_SHAREDDRIVE: printShowSharedDrives,
76978
77165
  Cmd.ARG_SHAREDDRIVEACLS: printShowSharedDriveACLs,
77166
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: printSharedDriveOrganizers,
76979
77167
  Cmd.ARG_SHEET: infoPrintShowSheets,
76980
77168
  Cmd.ARG_SHEETRANGE: printShowSheetRanges,
76981
77169
  Cmd.ARG_SIGNATURE: printShowSignature,
@@ -77333,6 +77521,7 @@ USER_COMMANDS_OBJ_ALIASES = {
77333
77521
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
77334
77522
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
77335
77523
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
77524
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
77336
77525
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
77337
77526
  Cmd.ARG_THREADS: Cmd.ARG_THREAD,
77338
77527
  Cmd.ARG_TOKENS: Cmd.ARG_TOKEN,
gam/gamlib/glclargs.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
  #
@@ -755,6 +755,7 @@ class GamCLArgs():
755
755
  ARG_SHAREDDRIVES = 'shareddrives'
756
756
  ARG_SHAREDDRIVEACLS = 'shareddriveacls'
757
757
  ARG_SHAREDDRIVEINFO = 'shareddriveinfo'
758
+ ARG_SHAREDDRIVEORGANIZERS = 'shareddriveorganizers'
758
759
  ARG_SHAREDDRIVETHEMES = 'shareddrivethemes'
759
760
  ARG_SHEET = 'sheet'
760
761
  ARG_SHEETS = 'sheets'
@@ -784,6 +785,7 @@ class GamCLArgs():
784
785
  ARG_TEAMDRIVES = 'teamdrives'
785
786
  ARG_TEAMDRIVEACLS = 'teamdriveacls'
786
787
  ARG_TEAMDRIVEINFO = 'teamdriveinfo'
788
+ ARG_TEAMDRIVEORGANIZERS = 'teamdriveorganizers'
787
789
  ARG_TEAMDRIVETHEMES = 'teamdrivethemes'
788
790
  ARG_THREAD = 'thread'
789
791
  ARG_THREADS = 'threads'
@@ -964,6 +966,7 @@ class GamCLArgs():
964
966
  OB_MOBILE_ENTITY = 'MobileEntity'
965
967
  OB_NETWORK_ID = 'networkID'
966
968
  OB_NAME = 'Name'
969
+ OB_ORGANIZER_TYPE_LIST = 'OrganizerTypeList'
967
970
  OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
968
971
  OB_ORGUNIT_ITEM = 'OrgUnitItem'
969
972
  OB_ORGUNIT_PATH = 'OrgUnitPath'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.7.17
3
+ Version: 7.8.1
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=PjYvXrjxg3GyaenwtBy7hoA2riEGofprRxKxfdmnQHA,3504740
1
+ gam/__init__.py,sha256=lAyeM6G9tA4Gb2Lvl865y6ErSDDYtGY_laDZsG--SmE,3513774
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
@@ -25,7 +25,7 @@ gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
25
25
  gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
26
26
  gam/gamlib/glapi.py,sha256=85YwZ5LhBoVd9kU3m-gwLRq8FwTWCaRIwARuQvH8Mjc,34022
27
27
  gam/gamlib/glcfg.py,sha256=eJCVb_OJ6cIsPuv-0IfIjHaTh5lM9juh4HOMLDblJmE,28055
28
- gam/gamlib/glclargs.py,sha256=2pb0bdmWbTM5WrNVlMP-d-pe8f5oY3XuF50m02v8ynk,42199
28
+ gam/gamlib/glclargs.py,sha256=zB6GMmDR_y5IRj7LuoM6-Bk_ETfNQ6sTqCNB6RdPfyg,42350
29
29
  gam/gamlib/glentity.py,sha256=fqWUlxQqPKlfFrkuPjCK2lZhhFBIZboCuO0qCxuEwqA,33691
30
30
  gam/gamlib/glgapi.py,sha256=cGtvFvvBU3XQJLgtLCjs_V5VBUem_k0b5uUrK21VmeA,39491
31
31
  gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
@@ -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.7.17.dist-info/METADATA,sha256=lKGF4vOovocpa-wrhc1ME1NqwEgkyzUWmIm43YJB2ag,2978
69
- gam7-7.7.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
- gam7-7.7.17.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
- gam7-7.7.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
- gam7-7.7.17.dist-info/RECORD,,
68
+ gam7-7.8.1.dist-info/METADATA,sha256=hROgYCJUA2X_WKqgJKVV5jwf3q58_oAD8-6nw9gYwiA,2977
69
+ gam7-7.8.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
70
+ gam7-7.8.1.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
71
+ gam7-7.8.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
72
+ gam7-7.8.1.dist-info/RECORD,,
File without changes