gam7 7.7.11__py3-none-any.whl → 7.7.12__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 +50 -56
- gam/gamlib/glcfg.py +5 -5
- gam/gamlib/glglobals.py +1 -4
- {gam7-7.7.11.dist-info → gam7-7.7.12.dist-info}/METADATA +1 -1
- {gam7-7.7.11.dist-info → gam7-7.7.12.dist-info}/RECORD +8 -8
- {gam7-7.7.11.dist-info → gam7-7.7.12.dist-info}/WHEEL +0 -0
- {gam7-7.7.11.dist-info → gam7-7.7.12.dist-info}/entry_points.txt +0 -0
- {gam7-7.7.11.dist-info → gam7-7.7.12.dist-info}/licenses/LICENSE +0 -0
gam/__init__.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# GAM7
|
|
5
5
|
#
|
|
6
|
-
# Copyright
|
|
6
|
+
# Copyright 2025, All Rights Reserved.
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
@@ -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.
|
|
28
|
+
__version__ = '7.07.12'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -42021,22 +42021,21 @@ def printShowUserVaultHolds(entityList):
|
|
|
42021
42021
|
else:
|
|
42022
42022
|
printKeyValueList(['Total Holds', totalHolds])
|
|
42023
42023
|
|
|
42024
|
-
def _cleanVaultQuery(query, cd):
|
|
42024
|
+
def _cleanVaultQuery(query, cd, drive):
|
|
42025
42025
|
if 'query' in query:
|
|
42026
|
-
if cd is not None:
|
|
42027
|
-
|
|
42028
|
-
|
|
42029
|
-
|
|
42030
|
-
|
|
42031
|
-
|
|
42032
|
-
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(sharedDriveId))
|
|
42026
|
+
if cd is not None and 'orgUnitInfo' in query['query']:
|
|
42027
|
+
query['query']['orgUnitInfo']['orgUnitPath'] = convertOrgUnitIDtoPath(cd, query['query']['orgUnitInfo']['orgUnitId'])
|
|
42028
|
+
if drive is not None and 'sharedDriveInfo' in query['query']:
|
|
42029
|
+
query['query']['sharedDriveInfo']['sharedDriveNames'] = []
|
|
42030
|
+
for sharedDriveId in query['query']['sharedDriveInfo']['sharedDriveIds']:
|
|
42031
|
+
query['query']['sharedDriveInfo']['sharedDriveNames'].append(_getSharedDriveNameFromId(drive, sharedDriveId, False))
|
|
42033
42032
|
query['query'].pop('searchMethod', None)
|
|
42034
42033
|
query['query'].pop('teamDriveInfo', None)
|
|
42035
42034
|
|
|
42036
42035
|
VAULT_QUERY_TIME_OBJECTS = {'createTime', 'endTime', 'startTime', 'versionDate'}
|
|
42037
42036
|
|
|
42038
|
-
def _showVaultQuery(matterNameId, query, cd, FJQC, k=0, kcount=0):
|
|
42039
|
-
_cleanVaultQuery(query, cd)
|
|
42037
|
+
def _showVaultQuery(matterNameId, query, cd, drive, FJQC, k=0, kcount=0):
|
|
42038
|
+
_cleanVaultQuery(query, cd, drive)
|
|
42040
42039
|
if FJQC is not None and FJQC.formatJSON:
|
|
42041
42040
|
printLine(json.dumps(cleanJSON(query, timeObjects=VAULT_QUERY_TIME_OBJECTS), ensure_ascii=False, sort_keys=False))
|
|
42042
42041
|
return
|
|
@@ -42068,7 +42067,7 @@ def doInfoVaultQuery():
|
|
|
42068
42067
|
queryId, queryName, queryNameId = convertQueryNameToID(v, getString(Cmd.OB_QUERY_ITEM), matterId, matterNameId)
|
|
42069
42068
|
else:
|
|
42070
42069
|
queryName = getString(Cmd.OB_QUERY_ITEM)
|
|
42071
|
-
cd = None
|
|
42070
|
+
cd = drive = None
|
|
42072
42071
|
fieldsList = []
|
|
42073
42072
|
FJQC = FormatJSONQuoteChar()
|
|
42074
42073
|
while Cmd.ArgumentsRemaining():
|
|
@@ -42078,8 +42077,8 @@ def doInfoVaultQuery():
|
|
|
42078
42077
|
queryId, queryName, queryNameId = convertQueryNameToID(v, queryName, matterId, matterNameId)
|
|
42079
42078
|
elif myarg == 'shownames':
|
|
42080
42079
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
42081
|
-
_,
|
|
42082
|
-
if
|
|
42080
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
42081
|
+
if drive is None:
|
|
42083
42082
|
return
|
|
42084
42083
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
42085
42084
|
pass
|
|
@@ -42090,7 +42089,7 @@ def doInfoVaultQuery():
|
|
|
42090
42089
|
query = callGAPI(v.matters().savedQueries(), 'get',
|
|
42091
42090
|
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN, GAPI.INVALID_ARGUMENT],
|
|
42092
42091
|
matterId=matterId, savedQueryId=queryId, fields=fields)
|
|
42093
|
-
_showVaultQuery(matterNameId, query, cd, FJQC)
|
|
42092
|
+
_showVaultQuery(matterNameId, query, cd, drive, FJQC)
|
|
42094
42093
|
except (GAPI.notFound, GAPI.badRequest, GAPI.forbidden, GAPI.invalidArgument) as e:
|
|
42095
42094
|
entityActionFailedWarning([Ent.VAULT_MATTER, matterNameId, Ent.VAULT_QUERY, queryNameId], str(e))
|
|
42096
42095
|
|
|
@@ -42107,7 +42106,7 @@ def doPrintShowVaultQueries():
|
|
|
42107
42106
|
csvPF = CSVPrintFile(PRINT_VAULT_QUERIES_TITLES, 'sortall') if Act.csvFormat() else None
|
|
42108
42107
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
42109
42108
|
matters = []
|
|
42110
|
-
cd = None
|
|
42109
|
+
cd = drive = None
|
|
42111
42110
|
fieldsList = []
|
|
42112
42111
|
while Cmd.ArgumentsRemaining():
|
|
42113
42112
|
myarg = getArgument()
|
|
@@ -42117,8 +42116,8 @@ def doPrintShowVaultQueries():
|
|
|
42117
42116
|
matters = shlexSplitList(getString(Cmd.OB_MATTER_ITEM_LIST))
|
|
42118
42117
|
elif myarg == 'shownames':
|
|
42119
42118
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
42120
|
-
_,
|
|
42121
|
-
if
|
|
42119
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
42120
|
+
if drive is None:
|
|
42122
42121
|
return
|
|
42123
42122
|
elif getFieldsList(myarg, VAULT_QUERY_FIELDS_CHOICE_MAP, fieldsList, initialField=['savedQueryId', 'displayName']):
|
|
42124
42123
|
pass
|
|
@@ -42180,11 +42179,11 @@ def doPrintShowVaultQueries():
|
|
|
42180
42179
|
k = 0
|
|
42181
42180
|
for query in queries:
|
|
42182
42181
|
k += 1
|
|
42183
|
-
_showVaultQuery(matterNameId, query, cd, FJQC, k, kcount)
|
|
42182
|
+
_showVaultQuery(matterNameId, query, cd, drive, FJQC, k, kcount)
|
|
42184
42183
|
Ind.Decrement()
|
|
42185
42184
|
else:
|
|
42186
42185
|
for query in queries:
|
|
42187
|
-
_cleanVaultQuery(query, cd)
|
|
42186
|
+
_cleanVaultQuery(query, cd, drive)
|
|
42188
42187
|
row = flattenJSON(query, flattened={'matterId': matterId, 'matterName': matterName}, timeObjects=VAULT_QUERY_TIME_OBJECTS)
|
|
42189
42188
|
if not FJQC.formatJSON:
|
|
42190
42189
|
csvPF.WriteRowTitles(row)
|
|
@@ -52447,20 +52446,15 @@ def _convertSharedDriveNameToId(drive, user, i, count, fileIdEntity, useDomainAd
|
|
|
52447
52446
|
','.join([td['id'] for td in tdlist])), i, count)
|
|
52448
52447
|
return False
|
|
52449
52448
|
|
|
52450
|
-
def _getSharedDriveNameFromId(sharedDriveId):
|
|
52449
|
+
def _getSharedDriveNameFromId(drive, sharedDriveId, useDomainAdminAccess=False):
|
|
52451
52450
|
sharedDriveName = GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME].get(sharedDriveId)
|
|
52452
52451
|
if not sharedDriveName:
|
|
52453
|
-
|
|
52454
|
-
|
|
52455
|
-
|
|
52456
|
-
|
|
52457
|
-
|
|
52458
|
-
|
|
52459
|
-
useDomainAdminAccess=True,
|
|
52460
|
-
driveId=sharedDriveId, fields='name')['name']
|
|
52461
|
-
except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
|
52462
|
-
sharedDriveName = TEAM_DRIVE
|
|
52463
|
-
else:
|
|
52452
|
+
try:
|
|
52453
|
+
sharedDriveName = callGAPI(drive.drives(), 'get',
|
|
52454
|
+
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.NOT_FOUND],
|
|
52455
|
+
useDomainAdminAccess=useDomainAdminAccess,
|
|
52456
|
+
driveId=sharedDriveId, fields='name')['name']
|
|
52457
|
+
except (GAPI.notFound, GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy):
|
|
52464
52458
|
sharedDriveName = TEAM_DRIVE
|
|
52465
52459
|
GM.Globals[GM.MAP_SHAREDDRIVE_ID_TO_NAME][sharedDriveId] = sharedDriveName
|
|
52466
52460
|
return sharedDriveName
|
|
@@ -52473,7 +52467,7 @@ def _getDriveFileNameFromId(drive, fileId, combineTitleId=True, useDomainAdminAc
|
|
|
52473
52467
|
if result:
|
|
52474
52468
|
fileName = result['name']
|
|
52475
52469
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
52476
|
-
fileName = _getSharedDriveNameFromId(result['driveId'])
|
|
52470
|
+
fileName = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
52477
52471
|
if combineTitleId:
|
|
52478
52472
|
fileName += '('+fileId+')'
|
|
52479
52473
|
return (fileName, _getEntityMimeType(result), result['mimeType'])
|
|
@@ -53555,7 +53549,7 @@ def getFilePaths(drive, fileTree, initialResult, filePathInfo, addParentsToTree=
|
|
|
53555
53549
|
fullpath=False, showDepth=False, folderPathOnly=False):
|
|
53556
53550
|
def _getParentName(result):
|
|
53557
53551
|
if (result['mimeType'] == MIMETYPE_GA_FOLDER) and result.get('driveId') and (result['name'] == TEAM_DRIVE):
|
|
53558
|
-
parentName = _getSharedDriveNameFromId(result['driveId'])
|
|
53552
|
+
parentName = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
53559
53553
|
if parentName != TEAM_DRIVE:
|
|
53560
53554
|
return f'{SHARED_DRIVES}{filePathInfo["delimiter"]}{parentName}'
|
|
53561
53555
|
return result['name']
|
|
@@ -54254,9 +54248,9 @@ def showFileInfo(users):
|
|
|
54254
54248
|
driveId = result.get('driveId')
|
|
54255
54249
|
if driveId:
|
|
54256
54250
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
54257
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
54251
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
54258
54252
|
if DFF.showSharedDriveNames:
|
|
54259
|
-
result['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
54253
|
+
result['driveName'] = _getSharedDriveNameFromId(drive, driveId)
|
|
54260
54254
|
if showNoParents:
|
|
54261
54255
|
result.setdefault('parents', [])
|
|
54262
54256
|
if getPermissionsForSharedDrives and driveId and 'permissions' not in result:
|
|
@@ -54944,7 +54938,7 @@ def extendFileTreeParents(drive, fileTree, fields):
|
|
|
54944
54938
|
result['parents'] = [ORPHANS] if result.get('ownedByMe', False) and 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
54945
54939
|
else:
|
|
54946
54940
|
if result['name'] == TEAM_DRIVE:
|
|
54947
|
-
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
54941
|
+
result['name'] = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
54948
54942
|
result['parents'] = [SHARED_DRIVES] if 'sharedWithMeTime' not in result else [SHARED_WITHME]
|
|
54949
54943
|
fileTree[fileId]['info'] = result
|
|
54950
54944
|
fileTree[fileId]['info']['noDisplay'] = True
|
|
@@ -55689,7 +55683,7 @@ def printFileList(users):
|
|
|
55689
55683
|
if not pmselect and 'permissions' in fileInfo:
|
|
55690
55684
|
fileInfo['permissions'] = DLP.GetFileMatchingPermission(fileInfo)
|
|
55691
55685
|
if DFF.showSharedDriveNames and driveId:
|
|
55692
|
-
fileInfo['driveName'] = _getSharedDriveNameFromId(driveId)
|
|
55686
|
+
fileInfo['driveName'] = _getSharedDriveNameFromId(drive, driveId)
|
|
55693
55687
|
if filepath:
|
|
55694
55688
|
if not FJQC.formatJSON or not addPathsToJSON:
|
|
55695
55689
|
addFilePathsToRow(drive, fileTree, fileInfo, filePathInfo, csvPF, row,
|
|
@@ -56559,7 +56553,7 @@ def printShowFilePaths(users):
|
|
|
56559
56553
|
driveId = result.get('driveId')
|
|
56560
56554
|
if driveId:
|
|
56561
56555
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
56562
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
56556
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
56563
56557
|
if returnPathOnly:
|
|
56564
56558
|
if fullpath:
|
|
56565
56559
|
writeStdout(f'{SHARED_DRIVES}/{result["name"]}\n')
|
|
@@ -56649,7 +56643,7 @@ def printFileParentTree(users):
|
|
|
56649
56643
|
driveId = result.get('driveId')
|
|
56650
56644
|
if driveId:
|
|
56651
56645
|
if result['mimeType'] == MIMETYPE_GA_FOLDER and result['name'] == TEAM_DRIVE:
|
|
56652
|
-
result['name'] = _getSharedDriveNameFromId(driveId)
|
|
56646
|
+
result['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
56653
56647
|
result['isRoot'] = True
|
|
56654
56648
|
result['parents'] = ['']
|
|
56655
56649
|
fileList.append(result)
|
|
@@ -56886,7 +56880,7 @@ def printShowFileCounts(users):
|
|
|
56886
56880
|
if not drive:
|
|
56887
56881
|
continue
|
|
56888
56882
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56889
|
-
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56883
|
+
sharedDriveName = _getSharedDriveNameFromId(drive, sharedDriveId) if sharedDriveId else ''
|
|
56890
56884
|
mimeTypeInfo = {}
|
|
56891
56885
|
userLastModification = _initLastModification()
|
|
56892
56886
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
@@ -57031,7 +57025,7 @@ def printShowDrivelastModifications(users):
|
|
|
57031
57025
|
if not drive:
|
|
57032
57026
|
continue
|
|
57033
57027
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
57034
|
-
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
57028
|
+
sharedDriveName = _getSharedDriveNameFromId(drive, sharedDriveId) if sharedDriveId else ''
|
|
57035
57029
|
userLastModification = _initLastModification()
|
|
57036
57030
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
57037
57031
|
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count)
|
|
@@ -57214,7 +57208,7 @@ def printDiskUsage(users):
|
|
|
57214
57208
|
includeOwner = False
|
|
57215
57209
|
csvPF.RemoveTitles(['Owner', 'ownedByMe'])
|
|
57216
57210
|
if topFolder['name'] == TEAM_DRIVE and not topFolder.get('parents'):
|
|
57217
|
-
topFolder['name'] = _getSharedDriveNameFromId(driveId)
|
|
57211
|
+
topFolder['name'] = _getSharedDriveNameFromId(drive, driveId)
|
|
57218
57212
|
topFolder['path'] = f'{SHARED_DRIVES}{pathDelimiter}{topFolder["name"]}'
|
|
57219
57213
|
else:
|
|
57220
57214
|
topFolder['path'] = topFolder['name']
|
|
@@ -57654,7 +57648,7 @@ def printShowFileTree(users):
|
|
|
57654
57648
|
fileId=fileId, fields=fields, supportsAllDrives=True)
|
|
57655
57649
|
if (fileEntryInfo['mimeType'] == MIMETYPE_GA_FOLDER and fileEntryInfo.get('driveId') and
|
|
57656
57650
|
fileEntryInfo['name'] == TEAM_DRIVE and not fileEntryInfo.get('parents', [])):
|
|
57657
|
-
fileEntryInfo['name'] = f"{SHARED_DRIVES}/{_getSharedDriveNameFromId(fileId)}"
|
|
57651
|
+
fileEntryInfo['name'] = f"{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, fileId)}"
|
|
57658
57652
|
if stripCRsFromName:
|
|
57659
57653
|
fileEntryInfo['name'] = _stripControlCharsFromName(fileEntryInfo['name'])
|
|
57660
57654
|
if buildTree:
|
|
@@ -59295,7 +59289,7 @@ def _getCopyMoveParentInfo(drive, user, i, count, j, jcount, newParentId, statis
|
|
|
59295
59289
|
result['destParentType'] = DEST_PARENT_MYDRIVE_FOLDER
|
|
59296
59290
|
else:
|
|
59297
59291
|
if result['name'] == TEAM_DRIVE and not result.get('parents', []):
|
|
59298
|
-
result['name'] = _getSharedDriveNameFromId(result['driveId'])
|
|
59292
|
+
result['name'] = _getSharedDriveNameFromId(drive, result['driveId'])
|
|
59299
59293
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_ROOT
|
|
59300
59294
|
else:
|
|
59301
59295
|
result['destParentType'] = DEST_PARENT_SHAREDDRIVE_FOLDER
|
|
@@ -59844,7 +59838,7 @@ def copyDriveFile(users):
|
|
|
59844
59838
|
# Source at root of Shared Drive?
|
|
59845
59839
|
sourceMimeType = source['mimeType']
|
|
59846
59840
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source.get('driveId') and source['name'] == TEAM_DRIVE and not source.get('parents', []):
|
|
59847
|
-
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
59841
|
+
source['name'] = _getSharedDriveNameFromId(drive, source['driveId'])
|
|
59848
59842
|
sourceName = source['name']
|
|
59849
59843
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
59850
59844
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -60615,7 +60609,7 @@ def moveDriveFile(users):
|
|
|
60615
60609
|
if sourceMimeType == MIMETYPE_GA_FOLDER and source['name'] in [MY_DRIVE, TEAM_DRIVE] and not source.get('parents', []):
|
|
60616
60610
|
copyMoveOptions['sourceIsMyDriveSharedDrive'] = True
|
|
60617
60611
|
if source.get('driveId'):
|
|
60618
|
-
source['name'] = _getSharedDriveNameFromId(source['driveId'])
|
|
60612
|
+
source['name'] = _getSharedDriveNameFromId(drive, source['driveId'])
|
|
60619
60613
|
sourceName = source['name']
|
|
60620
60614
|
sourceNameId = f"{sourceName}({source['id']})"
|
|
60621
60615
|
copyMoveOptions['sourceDriveId'] = source.get('driveId')
|
|
@@ -63059,7 +63053,7 @@ def printEmptyDriveFolders(users):
|
|
|
63059
63053
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63060
63054
|
csvPF.AddTitles(['driveId'])
|
|
63061
63055
|
csvPF.MoveTitlesToEnd(['name'])
|
|
63062
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63056
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, sharedDriveId)}']
|
|
63063
63057
|
else:
|
|
63064
63058
|
pathList = [fileEntryInfo['name']]
|
|
63065
63059
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -63149,7 +63143,7 @@ def deleteEmptyDriveFolders(users):
|
|
|
63149
63143
|
if 'driveId' in fileEntryInfo:
|
|
63150
63144
|
sharedDriveId = fileEntryInfo['driveId']
|
|
63151
63145
|
fileIdEntity['shareddrive'] = {'driveId': sharedDriveId, 'corpora': 'drive', 'includeItemsFromAllDrives': True, 'supportsAllDrives': True}
|
|
63152
|
-
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(sharedDriveId)}']
|
|
63146
|
+
pathList = [f'{SHARED_DRIVES}/{_getSharedDriveNameFromId(drive, sharedDriveId)}']
|
|
63153
63147
|
else:
|
|
63154
63148
|
pathList = [fileEntryInfo['name']]
|
|
63155
63149
|
mimeType = fileEntryInfo['mimeType']
|
|
@@ -65586,7 +65580,7 @@ def doPrintShowSharedDrives():
|
|
|
65586
65580
|
def doPrintShowOrgunitSharedDrives():
|
|
65587
65581
|
def _getOrgUnitSharedDriveInfo(shareddrive):
|
|
65588
65582
|
shareddrive['driveId'] = shareddrive['name'].rsplit(';')[1]
|
|
65589
|
-
shareddrive['driveName'] = _getSharedDriveNameFromId(shareddrive['driveId'])
|
|
65583
|
+
shareddrive['driveName'] = _getSharedDriveNameFromId(drive, shareddrive['driveId'], True)
|
|
65590
65584
|
shareddrive['orgUnitPath'] = orgUnitPath
|
|
65591
65585
|
|
|
65592
65586
|
def _showOrgUnitSharedDrive(shareddrive, j, jcount, FJQC):
|
|
@@ -65600,13 +65594,13 @@ def doPrintShowOrgunitSharedDrives():
|
|
|
65600
65594
|
printEntity([Ent.MEMBER_URI, shareddrive['memberUri']])
|
|
65601
65595
|
printEntity([Ent.SHAREDDRIVE_ID, shareddrive['driveId']])
|
|
65602
65596
|
printEntity([Ent.SHAREDDRIVE_NAME, shareddrive['driveName']])
|
|
65603
|
-
printEntity([Ent.ORGANIZATIONAL_UNIT, shareddrive['
|
|
65597
|
+
printEntity([Ent.ORGANIZATIONAL_UNIT, shareddrive['orgUnitPath']])
|
|
65604
65598
|
Ind.Decrement()
|
|
65605
65599
|
|
|
65606
65600
|
ci = buildGAPIObject(API.CLOUDIDENTITY_ORGUNITS_BETA)
|
|
65607
65601
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
65608
|
-
_,
|
|
65609
|
-
if
|
|
65602
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, _getAdminEmail())
|
|
65603
|
+
if drive is None:
|
|
65610
65604
|
return
|
|
65611
65605
|
csvPF = CSVPrintFile(['name', 'type', 'member', 'memberUri', 'driveId', 'driveName', 'orgUnitPath']) if Act.csvFormat() else None
|
|
65612
65606
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
@@ -65685,13 +65679,13 @@ def copySyncSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
65685
65679
|
if not drive:
|
|
65686
65680
|
continue
|
|
65687
65681
|
if not srcFileIdEntity.get('shareddrivename'):
|
|
65688
|
-
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(srcFileIdEntity['shareddrive']['driveId'])
|
|
65682
|
+
srcFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, srcFileIdEntity['shareddrive']['driveId'])
|
|
65689
65683
|
if tgtFileIdEntity.get('shareddrivename'):
|
|
65690
65684
|
if not _convertSharedDriveNameToId(drive, user, i, count, tgtFileIdEntity, useDomainAdminAccess):
|
|
65691
65685
|
continue
|
|
65692
65686
|
tgtFileIdEntity['shareddrive']['corpora'] = 'drive'
|
|
65693
65687
|
else:
|
|
65694
|
-
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(tgtFileIdEntity['shareddrive']['driveId'])
|
|
65688
|
+
tgtFileIdEntity['shareddrivename'] = _getSharedDriveNameFromId(drive, tgtFileIdEntity['shareddrive']['driveId'])
|
|
65695
65689
|
statistics = _initStatistics()
|
|
65696
65690
|
copyMoveOptions['sourceDriveId'] = srcFileIdEntity['shareddrive']['driveId']
|
|
65697
65691
|
copyMoveOptions['destDriveId'] = tgtFileIdEntity['shareddrive']['driveId']
|
gam/gamlib/glcfg.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
# Copyright (C)
|
|
3
|
+
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
|
4
4
|
#
|
|
5
5
|
# All Rights Reserved.
|
|
6
6
|
#
|
|
@@ -260,12 +260,12 @@ SMTP_HOST = 'smtp_host'
|
|
|
260
260
|
SMTP_USERNAME = 'smtp_username'
|
|
261
261
|
# SMTP password
|
|
262
262
|
SMTP_PASSWORD = 'smtp_password'
|
|
263
|
+
# Time Zone
|
|
264
|
+
TIMEZONE = 'timezone'
|
|
263
265
|
## Minimum TLS Version required for HTTPS connections
|
|
264
266
|
TLS_MIN_VERSION = 'tls_min_version'
|
|
265
267
|
## Maximum TLS Version used for HTTPS connections
|
|
266
268
|
TLS_MAX_VERSION = 'tls_max_version'
|
|
267
|
-
# Time Zone
|
|
268
|
-
TIMEZONE = 'timezone'
|
|
269
269
|
# Clear basic filter when updating an existing sheet
|
|
270
270
|
TODRIVE_CLEARFILTER = 'todrive_clearfilter'
|
|
271
271
|
# Use client access for todrive
|
|
@@ -431,9 +431,9 @@ Defaults = {
|
|
|
431
431
|
SMTP_HOST: '',
|
|
432
432
|
SMTP_USERNAME: '',
|
|
433
433
|
SMTP_PASSWORD: '',
|
|
434
|
+
TIMEZONE: 'utc',
|
|
434
435
|
TLS_MIN_VERSION: 'TLSv1_3',
|
|
435
436
|
TLS_MAX_VERSION: '',
|
|
436
|
-
TIMEZONE: 'utc',
|
|
437
437
|
TODRIVE_CLEARFILTER: FALSE,
|
|
438
438
|
TODRIVE_CLIENTACCESS: FALSE,
|
|
439
439
|
TODRIVE_CONVERSION: TRUE,
|
|
@@ -599,9 +599,9 @@ VAR_INFO = {
|
|
|
599
599
|
SMTP_HOST: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
600
600
|
SMTP_USERNAME: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
|
601
601
|
SMTP_PASSWORD: {VAR_TYPE: TYPE_PASSWORD, VAR_LIMITS: (0, None)},
|
|
602
|
+
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
|
602
603
|
TLS_MIN_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MIN_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
603
604
|
TLS_MAX_VERSION: {VAR_TYPE: TYPE_CHOICE, VAR_ENVVAR: 'GAM_TLS_MAX_VERSION', VAR_CHOICES: TLS_CHOICE_MAP},
|
|
604
|
-
TIMEZONE: {VAR_TYPE: TYPE_TIMEZONE},
|
|
605
605
|
TODRIVE_CLEARFILTER: {VAR_TYPE: TYPE_BOOLEAN},
|
|
606
606
|
TODRIVE_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
607
607
|
TODRIVE_CONVERSION: {VAR_TYPE: TYPE_BOOLEAN},
|
gam/gamlib/glglobals.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
# Copyright (C)
|
|
3
|
+
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
|
4
4
|
#
|
|
5
5
|
# All Rights Reserved.
|
|
6
6
|
#
|
|
@@ -25,8 +25,6 @@
|
|
|
25
25
|
# Some commands want to set a non-zero return code but not bail
|
|
26
26
|
# GAM admin user from oauth2.txt or oauth2service.json
|
|
27
27
|
ADMIN = 'admn'
|
|
28
|
-
# Drive service for admin; used to look up Shared Drive Names
|
|
29
|
-
ADMIN_DRIVE = 'addr'
|
|
30
28
|
# Number/length of API call retries
|
|
31
29
|
API_CALLS_RETRY_DATA = 'rtry'
|
|
32
30
|
# GAM cache directory. If no_cache is True, this variable will be set to None
|
|
@@ -220,7 +218,6 @@ REDIRECT_QUEUE_EOF = 'eof'
|
|
|
220
218
|
#
|
|
221
219
|
Globals = {
|
|
222
220
|
ADMIN: None,
|
|
223
|
-
ADMIN_DRIVE: None,
|
|
224
221
|
API_CALLS_RETRY_DATA: {},
|
|
225
222
|
CACHE_DIR: None,
|
|
226
223
|
CACHE_DISCOVERY_ONLY: True,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=G-u3EcbEw8f8nJNw-wbcZr5vjrebdXNbfGQSrWQZjDw,3501588
|
|
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
|
|
@@ -24,12 +24,12 @@ 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
26
|
gam/gamlib/glapi.py,sha256=85YwZ5LhBoVd9kU3m-gwLRq8FwTWCaRIwARuQvH8Mjc,34022
|
|
27
|
-
gam/gamlib/glcfg.py,sha256=
|
|
27
|
+
gam/gamlib/glcfg.py,sha256=eJCVb_OJ6cIsPuv-0IfIjHaTh5lM9juh4HOMLDblJmE,28055
|
|
28
28
|
gam/gamlib/glclargs.py,sha256=2pb0bdmWbTM5WrNVlMP-d-pe8f5oY3XuF50m02v8ynk,42199
|
|
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
|
|
32
|
-
gam/gamlib/glglobals.py,sha256=
|
|
32
|
+
gam/gamlib/glglobals.py,sha256=J0xcHggVrUBzHJ5GruenKV-qV1zPKcK2qWgAgN3i5Jw,9608
|
|
33
33
|
gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
|
|
34
34
|
gam/gamlib/glmsgs.py,sha256=3wqw8Hq-l2n_TGkf7xhjQS9W6Xz5Ic2ErgsW3h-7qNM,33465
|
|
35
35
|
gam/gamlib/glskus.py,sha256=xJ1E2BZ_CGHN6I19c9i8DApb5bT5VT-hGyMEmQ5hSRY,15241
|
|
@@ -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.
|
|
69
|
-
gam7-7.7.
|
|
70
|
-
gam7-7.7.
|
|
71
|
-
gam7-7.7.
|
|
72
|
-
gam7-7.7.
|
|
68
|
+
gam7-7.7.12.dist-info/METADATA,sha256=h3CdntwsA0-Q9gkONw0sSwea8d32VpAAbgxVRu8N0hM,2970
|
|
69
|
+
gam7-7.7.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
70
|
+
gam7-7.7.12.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
71
|
+
gam7-7.7.12.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
72
|
+
gam7-7.7.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|