gam7 7.7.17__py3-none-any.whl → 7.8.0__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.00'
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,159 @@ 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] [shareddriveadminquery|query <QuerySharedDrive>]
66057
+ # [matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
66058
+ # [domainlist <DomainList>]
66059
+ # [includetypes user|group]
66060
+ # [oneorganizer [<Boolean>]]
66061
+ # [shownorganizerdrives false|true|only]
66062
+ # [includefileorganizers [<Boolean>]]
66063
+ # [delimiter <Character>]
66064
+ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
66065
+ csvPF = CSVPrintFile(['id', 'name', 'organizers', 'createdTime'], 'sortall')
66066
+ delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
66067
+ roles = set(['organizer'])
66068
+ includeTypes = set()
66069
+ showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
66070
+ fieldsList = ['role', 'type', 'emailAddress']
66071
+ cd = orgUnitId = query = matchPattern = None
66072
+ domainList = []
66073
+ oneOrganizer = False
66074
+ while Cmd.ArgumentsRemaining():
66075
+ myarg = getArgument()
66076
+ if csvPF and myarg == 'todrive':
66077
+ csvPF.GetTodriveParameters()
66078
+ elif myarg == 'delimiter':
66079
+ delimiter = getCharacter()
66080
+ elif myarg in {'teamdriveadminquery', 'shareddriveadminquery', 'query'}:
66081
+ queryLocation = Cmd.Location()
66082
+ query = getString(Cmd.OB_QUERY, minLen=0) or None
66083
+ if query:
66084
+ query = mapQueryRelativeTimes(query, ['createdTime'])
66085
+ elif myarg == 'matchname':
66086
+ matchPattern = getREPattern(re.IGNORECASE)
66087
+ elif myarg in {'ou', 'org', 'orgunit'}:
66088
+ orgLocation = Cmd.Location()
66089
+ if cd is None:
66090
+ cd = buildGAPIObject(API.DIRECTORY)
66091
+ orgUnitPath, orgUnitId = getOrgUnitId(cd)
66092
+ orgUnitId = orgUnitId[3:]
66093
+ orgUnitInfo = {'orgUnit': orgUnitPath, 'orgUnitId': orgUnitId}
66094
+ elif myarg in ADMIN_ACCESS_OPTIONS:
66095
+ useDomainAdminAccess = True
66096
+ elif myarg == 'domainlist':
66097
+ domainList = set(getString(Cmd.OB_DOMAIN_NAME_LIST).replace(',', ' ').lower().split())
66098
+ elif myarg == 'includetypes':
66099
+ for itype in getString(Cmd.OB_ORGANIZER_TYPE_LIST).lower().replace(',', ' ').split():
66100
+ if itype in PRINT_ORGANIZER_TYPES:
66101
+ includeTypes.add(itype)
66102
+ else:
66103
+ invalidChoiceExit(itype, PRINT_ORGANIZER_TYPES, True)
66104
+ elif myarg == 'oneorganizer':
66105
+ oneOrganizer = getBoolean()
66106
+ elif myarg == 'shownoorganizerdrives':
66107
+ showNoOrganizerDrives = getChoice(SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP, defaultChoice=1, mapChoice=True)
66108
+ elif myarg in {'includefileorganizers', 'includecontentmanagers'}:
66109
+ if getBoolean():
66110
+ roles.add('fileOrganizer')
66111
+ else:
66112
+ unknownArgumentExit()
66113
+ if query and not useDomainAdminAccess:
66114
+ Cmd.SetLocation(queryLocation-1)
66115
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_PERFORM_SHARED_DRIVE_QUERIES)
66116
+ if orgUnitId is not None:
66117
+ if not useDomainAdminAccess:
66118
+ Cmd.SetLocation(orgLocation-1)
66119
+ usageErrorExit(Msg.ONLY_ADMINISTRATORS_CAN_SPECIFY_SHARED_DRIVE_ORGUNIT)
66120
+ csvPF.AddTitles(['orgUnit', 'orgUnitId'])
66121
+ if not includeTypes:
66122
+ includeTypes = PRINT_ORGANIZER_TYPES
66123
+ fields = getItemFieldsFromFieldsList('permissions', fieldsList, True)
66124
+ i, count, users = getEntityArgument(users)
66125
+ for user in users:
66126
+ i += 1
66127
+ user, drive = buildGAPIServiceObject(API.DRIVE3, user, i, count)
66128
+ if not drive:
66129
+ continue
66130
+ if useDomainAdminAccess:
66131
+ printGettingAllAccountEntities(Ent.SHAREDDRIVE, query)
66132
+ pageMessage = getPageMessage()
66133
+ 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
66152
+ matchFeed = []
66153
+ jcount = len(feed)
66154
+ j = 0
66155
+ for shareddrive in feed:
66156
+ j += 1
66157
+ if ((matchPattern is not None and matchPattern.match(shareddrive['name']) is None) or
66158
+ (orgUnitId is not None and orgUnitId != shareddrive.get('orgUnitId'))):
66159
+ continue
66160
+ printGettingAllEntityItemsForWhom(Ent.PERMISSION, shareddrive['name'], j, jcount)
66161
+ shareddrive['createdTime'] = formatLocalTime(shareddrive['createdTime'])
66162
+ shareddrive['organizers'] = []
66163
+ try:
66164
+ permissions = callGAPIpages(drive.permissions(), 'list', 'permissions',
66165
+ pageMessage=getPageMessageForWhom(),
66166
+ throwReasons=GAPI.DRIVE3_GET_ACL_REASONS,
66167
+ retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
66168
+ useDomainAdminAccess=useDomainAdminAccess,
66169
+ fileId=shareddrive['id'], fields=fields, supportsAllDrives=True)
66170
+ for permission in permissions:
66171
+ if permission['type'] in includeTypes and permission['role'] in roles:
66172
+ if domainList:
66173
+ _, domain = permission['emailAddress'].lower().split('@', 1)
66174
+ if domain not in domainList:
66175
+ continue
66176
+ shareddrive['organizers'].append(permission['emailAddress'])
66177
+ if oneOrganizer:
66178
+ break
66179
+ if not shareddrive['organizers']:
66180
+ if showNoOrganizerDrives == 0: # no organizers and showNoOrganizerDrives False - ignore
66181
+ continue
66182
+ matchFeed.append(shareddrive) # no organizers and showNoOrganizerDrives Only/True - keep
66183
+ continue
66184
+ if showNoOrganizerDrives < 0: # organizers and showNoOrganizerDrives Only/True - ignore
66185
+ continue
66186
+ matchFeed.append(shareddrive)
66187
+ except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
66188
+ GAPI.insufficientAdministratorPrivileges, GAPI.insufficientFilePermissions,
66189
+ GAPI.unknownError, GAPI.invalid):
66190
+ pass
66191
+ if len(matchFeed) == 0:
66192
+ setSysExitRC(NO_ENTITIES_FOUND_RC)
66193
+ for shareddrive in matchFeed:
66194
+ row = {'id': shareddrive['id'], 'name': shareddrive['name'],
66195
+ 'organizers': delimiter.join(shareddrive['organizers']),
66196
+ 'createdTime': shareddrive['createdTime']}
66197
+ if orgUnitId:
66198
+ row.update(orgUnitInfo)
66199
+ csvPF.WriteRowTitles(row)
66200
+ if csvPF:
66201
+ csvPF.writeCSVfile('SharedDrive Organizers')
66202
+
66203
+ def doPrintSharedDriveOrganizers():
66204
+ printSharedDriveOrganizers([_getAdminEmail()], True)
66205
+
66053
66206
  LOOKERSTUDIO_ASSETTYPE_CHOICE_MAP = {
66054
66207
  'report': ['REPORT'],
66055
66208
  'datasource': ['DATA_SOURCE'],
@@ -75936,6 +76089,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
75936
76089
  Cmd.ARG_SCHEMA: doPrintShowUserSchemas,
75937
76090
  Cmd.ARG_SHAREDDRIVE: doPrintShowSharedDrives,
75938
76091
  Cmd.ARG_SHAREDDRIVEACLS: doPrintShowSharedDriveACLs,
76092
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: doPrintSharedDriveOrganizers,
75939
76093
  Cmd.ARG_SITE: deprecatedDomainSites,
75940
76094
  Cmd.ARG_SITEACL: deprecatedDomainSites,
75941
76095
  Cmd.ARG_SITEACTIVITY: deprecatedDomainSites,
@@ -76284,6 +76438,7 @@ MAIN_COMMANDS_OBJ_ALIASES = {
76284
76438
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
76285
76439
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
76286
76440
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
76441
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
76287
76442
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
76288
76443
  Cmd.ARG_TOKENS: Cmd.ARG_TOKEN,
76289
76444
  Cmd.ARG_TRANSFER: Cmd.ARG_DATATRANSFER,
@@ -76976,6 +77131,7 @@ USER_COMMANDS_WITH_OBJECTS = {
76976
77131
  Cmd.ARG_SENDAS: printShowSendAs,
76977
77132
  Cmd.ARG_SHAREDDRIVE: printShowSharedDrives,
76978
77133
  Cmd.ARG_SHAREDDRIVEACLS: printShowSharedDriveACLs,
77134
+ Cmd.ARG_SHAREDDRIVEORGANIZERS: printSharedDriveOrganizers,
76979
77135
  Cmd.ARG_SHEET: infoPrintShowSheets,
76980
77136
  Cmd.ARG_SHEETRANGE: printShowSheetRanges,
76981
77137
  Cmd.ARG_SIGNATURE: printShowSignature,
@@ -77333,6 +77489,7 @@ USER_COMMANDS_OBJ_ALIASES = {
77333
77489
  Cmd.ARG_TEAMDRIVES: Cmd.ARG_SHAREDDRIVE,
77334
77490
  Cmd.ARG_TEAMDRIVEACLS: Cmd.ARG_SHAREDDRIVEACLS,
77335
77491
  Cmd.ARG_TEAMDRIVEINFO: Cmd.ARG_SHAREDDRIVEINFO,
77492
+ Cmd.ARG_TEAMDRIVEORGANIZERS: Cmd.ARG_SHAREDDRIVEORGANIZERS,
77336
77493
  Cmd.ARG_TEAMDRIVETHEMES: Cmd.ARG_SHAREDDRIVETHEMES,
77337
77494
  Cmd.ARG_THREADS: Cmd.ARG_THREAD,
77338
77495
  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.0
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=SdaM0sI4IUxepULX1otTVVcG88zMq-P9crfuFa9te-4,3512307
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.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,,
File without changes