gam7 7.6.0__py3-none-any.whl → 7.6.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 +183 -29
- gam/gamlib/glclargs.py +2 -0
- gam/gamlib/glgapi.py +13 -2
- {gam7-7.6.0.dist-info → gam7-7.6.2.dist-info}/METADATA +1 -1
- {gam7-7.6.0.dist-info → gam7-7.6.2.dist-info}/RECORD +8 -8
- {gam7-7.6.0.dist-info → gam7-7.6.2.dist-info}/WHEEL +0 -0
- {gam7-7.6.0.dist-info → gam7-7.6.2.dist-info}/entry_points.txt +0 -0
- {gam7-7.6.0.dist-info → gam7-7.6.2.dist-info}/licenses/LICENSE +0 -0
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.06.
|
|
28
|
+
__version__ = '7.06.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
|
|
@@ -28152,10 +28152,18 @@ CHROME_SCHEMA_TYPE_MESSAGE = {
|
|
|
28152
28152
|
{'autoupdatecheckperiodminutesnew':
|
|
28153
28153
|
{'casedField': 'autoUpdateCheckPeriodMinutesNew',
|
|
28154
28154
|
'type': 'duration', 'minVal': 1, 'maxVal': 720, 'scale': 60}},
|
|
28155
|
+
'chrome.users.AutoUpdateCheckPeriodNewV2':
|
|
28156
|
+
{'autoupdatecheckperiodminutesnew':
|
|
28157
|
+
{'casedField': 'autoUpdateCheckPeriodMinutesNew',
|
|
28158
|
+
'type': 'duration', 'minVal': 1, 'maxVal': 720, 'scale': 60}},
|
|
28155
28159
|
'chrome.users.BrowserSwitcherDelayDuration':
|
|
28156
28160
|
{'browserswitcherdelayduration':
|
|
28157
28161
|
{'casedField': 'browserSwitcherDelayDuration',
|
|
28158
28162
|
'type': 'duration', 'minVal': 0, 'maxVal': 30, 'scale': 1}},
|
|
28163
|
+
'chrome.users.CloudReportingUploadFrequencyV2':
|
|
28164
|
+
{'cloudreportinguploadfrequency':
|
|
28165
|
+
{'casedField': 'cloudReportingUploadFrequency',
|
|
28166
|
+
'type': 'count', 'minVal': 3, 'maxVal': 24, 'scale': 1}},
|
|
28159
28167
|
'chrome.users.FetchKeepaliveDurationSecondsOnShutdown':
|
|
28160
28168
|
{'fetchkeepalivedurationsecondsonshutdown':
|
|
28161
28169
|
{'casedField': 'fetchKeepaliveDurationSecondsOnShutdown',
|
|
@@ -28172,6 +28180,10 @@ CHROME_SCHEMA_TYPE_MESSAGE = {
|
|
|
28172
28180
|
{'printjobhistoryexpirationperioddaysnew':
|
|
28173
28181
|
{'casedField': 'printJobHistoryExpirationPeriodDaysNew',
|
|
28174
28182
|
'type': 'duration', 'minVal': -1, 'maxVal': None, 'scale': 86400}},
|
|
28183
|
+
'chrome.users.RelaunchNotificationWithDurationV2':
|
|
28184
|
+
{'relaunchnotificationperiodduration':
|
|
28185
|
+
{'casedField': 'relaunchNotificationPeriodDuration',
|
|
28186
|
+
'type': 'duration', 'minVal': -1, 'maxVal': None, 'scale': 3600}},
|
|
28175
28187
|
'chrome.users.SecurityTokenSessionSettings':
|
|
28176
28188
|
{'securitytokensessionnotificationseconds':
|
|
28177
28189
|
{'casedField': 'securityTokenSessionNotificationSeconds',
|
|
@@ -56474,6 +56486,44 @@ def printFileParentTree(users):
|
|
|
56474
56486
|
kcount -= 1
|
|
56475
56487
|
csvPF.writeCSVfile('Drive File Parent Tree')
|
|
56476
56488
|
|
|
56489
|
+
# Last file modification utilities
|
|
56490
|
+
def _initLastModification():
|
|
56491
|
+
return {'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56492
|
+
'lastModifiedFileMimeType': '', 'lastModifiedFilaPath': '',
|
|
56493
|
+
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME,
|
|
56494
|
+
'fileEntryInfo': {}}
|
|
56495
|
+
|
|
56496
|
+
def _checkUpdateLastModifiction(f_file, userLastModification):
|
|
56497
|
+
if f_file.get('modifiedTime', NEVER_TIME) > userLastModification['lastModifiedTime'] and 'lastModifyingUser' in f_file:
|
|
56498
|
+
userLastModification['lastModifiedFileId'] = f_file['id']
|
|
56499
|
+
userLastModification['lastModifiedFileName'] = _stripControlCharsFromName(f_file['name'])
|
|
56500
|
+
userLastModification['lastModifiedFileMimeType'] = f_file['mimeType']
|
|
56501
|
+
userLastModification['lastModifiedTime'] = f_file['modifiedTime']
|
|
56502
|
+
userLastModification['lastModifyingUser'] = f_file['lastModifyingUser'].get('emailAddress',
|
|
56503
|
+
f_file['lastModifyingUser'].get('displayName', UNKNOWN))
|
|
56504
|
+
userLastModification['fileEntryInfo'] = f_file.copy()
|
|
56505
|
+
|
|
56506
|
+
def _getLastModificationPath(drive, userLastModification, pathDelimiter):
|
|
56507
|
+
filePathInfo = initFilePathInfo(pathDelimiter)
|
|
56508
|
+
_, paths, _ = getFilePaths(drive, {}, userLastModification['fileEntryInfo'], filePathInfo)
|
|
56509
|
+
userLastModification['lastModifiedFilePath'] = paths[0] if paths else UNKNOWN
|
|
56510
|
+
|
|
56511
|
+
def _showLastModification(lastModification):
|
|
56512
|
+
printKeyValueList(['lastModifiedFileId', lastModification['lastModifiedFileId']])
|
|
56513
|
+
printKeyValueList(['lastModifiedFileName', lastModification['lastModifiedFileName']])
|
|
56514
|
+
printKeyValueList(['lastModifiedFileMimeType', lastModification['lastModifiedFileMimeType']])
|
|
56515
|
+
printKeyValueList(['lastModifiedFilePath', lastModification['lastModifiedFilePath']])
|
|
56516
|
+
printKeyValueList(['lastModifyingUser', lastModification['lastModifyingUser']])
|
|
56517
|
+
printKeyValueList(['lastModifiedTime', formatLocalTime(lastModification['lastModifiedTime'])])
|
|
56518
|
+
|
|
56519
|
+
def _updateLastModificationRow(row, lastModification):
|
|
56520
|
+
row.update({'lastModifiedFileId': lastModification['lastModifiedFileId'],
|
|
56521
|
+
'lastModifiedFileName': lastModification['lastModifiedFileName'],
|
|
56522
|
+
'lastModifiedFileMimeType': lastModification['lastModifiedFileMimeType'],
|
|
56523
|
+
'lastModifiedFilePath': lastModification['lastModifiedFilePath'],
|
|
56524
|
+
'lastModifyingUser': lastModification['lastModifyingUser'],
|
|
56525
|
+
'lastModifiedTime': formatLocalTime(lastModification['lastModifiedTime'])})
|
|
56526
|
+
|
|
56477
56527
|
# gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
|
56478
56528
|
# [((query <QueryDriveFile>) | (fullquery <QueryDriveFile>) | <DriveFileQueryShortcut>) (querytime<String> <Time>)*]
|
|
56479
56529
|
# [continueoninvalidquery [<Boolean>]]
|
|
@@ -56485,7 +56535,8 @@ def printFileParentTree(users):
|
|
|
56485
56535
|
# [filenamematchpattern <REMatchPattern>]
|
|
56486
56536
|
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
56487
56537
|
# [excludetrashed] (addcsvdata <FieldName> <String>)*
|
|
56488
|
-
# [showsize] [showmimetypesize]
|
|
56538
|
+
# [showsize] [showmimetypesize]
|
|
56539
|
+
# [showlastmodification] [pathdelimiter <Character>]
|
|
56489
56540
|
# (addcsvdata <FieldName> <String>)*
|
|
56490
56541
|
# [summary none|only|plus] [summaryuser <String>]
|
|
56491
56542
|
# gam <UserTypeEntity> show filecounts
|
|
@@ -56499,7 +56550,8 @@ def printFileParentTree(users):
|
|
|
56499
56550
|
# [filenamematchpattern <REMatchPattern>]
|
|
56500
56551
|
# <PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
|
56501
56552
|
# [excludetrashed]
|
|
56502
|
-
# [showsize] [showmimetypesize]
|
|
56553
|
+
# [showsize] [showmimetypesize]
|
|
56554
|
+
# [showlastmodification] [pathdelimiter <Character>]
|
|
56503
56555
|
# [summary none|only|plus] [summaryuser <String>]
|
|
56504
56556
|
def printShowFileCounts(users):
|
|
56505
56557
|
def _setSelectionFields():
|
|
@@ -56508,7 +56560,7 @@ def printShowFileCounts(users):
|
|
|
56508
56560
|
if showSize or (DLP.minimumFileSize is not None) or (DLP.maximumFileSize is not None):
|
|
56509
56561
|
fieldsList.append(sizeField)
|
|
56510
56562
|
if showLastModification:
|
|
56511
|
-
fieldsList.extend(['id,name,modifiedTime,lastModifyingUser(me, displayName, emailAddress)'])
|
|
56563
|
+
fieldsList.extend(['id,name,modifiedTime,lastModifyingUser(me, displayName, emailAddress),parents'])
|
|
56512
56564
|
if DLP.filenameMatchPattern:
|
|
56513
56565
|
fieldsList.append('name')
|
|
56514
56566
|
if DLP.excludeTrashed:
|
|
@@ -56544,9 +56596,7 @@ def printShowFileCounts(users):
|
|
|
56544
56596
|
printEntityKVList(kvList, dataList, i, count)
|
|
56545
56597
|
Ind.Increment()
|
|
56546
56598
|
if showLastModification:
|
|
56547
|
-
|
|
56548
|
-
'lastModifyingUser', lastModification['lastModifyingUser'],
|
|
56549
|
-
'lastModifiedTime', formatLocalTime(lastModification['lastModifiedTime'])])
|
|
56599
|
+
_showLastModification(lastModification)
|
|
56550
56600
|
for mimeType, mtinfo in sorted(iter(mimeTypeInfo.items())):
|
|
56551
56601
|
if not showMimeTypeSize:
|
|
56552
56602
|
printKeyValueList([mimeType, mtinfo['count']])
|
|
@@ -56561,10 +56611,7 @@ def printShowFileCounts(users):
|
|
|
56561
56611
|
if showSize:
|
|
56562
56612
|
row['Size'] = sizeTotal
|
|
56563
56613
|
if showLastModification:
|
|
56564
|
-
row
|
|
56565
|
-
'lastModifiedFileName': lastModification['lastModifiedFileName'],
|
|
56566
|
-
'lastModifyingUser': lastModification['lastModifyingUser'],
|
|
56567
|
-
'lastModifiedTime': formatLocalTime(lastModification['lastModifiedTime'])})
|
|
56614
|
+
_updateLastModificationRow(row, lastModification)
|
|
56568
56615
|
if addCSVData:
|
|
56569
56616
|
row.update(addCSVData)
|
|
56570
56617
|
for mimeType, mtinfo in sorted(iter(mimeTypeInfo.items())):
|
|
@@ -56578,6 +56625,7 @@ def printShowFileCounts(users):
|
|
|
56578
56625
|
csvPF.SetZeroBlankMimeTypeCounts(True)
|
|
56579
56626
|
fieldsList = ['mimeType']
|
|
56580
56627
|
DLP = DriveListParameters({'allowChoose': False, 'allowCorpora': True, 'allowQuery': True, 'mimeTypeInQuery': True})
|
|
56628
|
+
pathDelimiter = '/'
|
|
56581
56629
|
sharedDriveId = sharedDriveName = ''
|
|
56582
56630
|
continueOnInvalidQuery = showSize = showLastModification = showMimeTypeSize = False
|
|
56583
56631
|
sizeField = 'quotaBytesUsed'
|
|
@@ -56586,9 +56634,7 @@ def printShowFileCounts(users):
|
|
|
56586
56634
|
summaryMimeTypeInfo = {}
|
|
56587
56635
|
fileIdEntity = {}
|
|
56588
56636
|
addCSVData = {}
|
|
56589
|
-
summaryLastModification =
|
|
56590
|
-
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56591
|
-
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME}
|
|
56637
|
+
summaryLastModification = _initLastModification()
|
|
56592
56638
|
while Cmd.ArgumentsRemaining():
|
|
56593
56639
|
myarg = getArgument()
|
|
56594
56640
|
if csvPF and myarg == 'todrive':
|
|
@@ -56611,6 +56657,8 @@ def printShowFileCounts(users):
|
|
|
56611
56657
|
summary = getChoice(FILECOUNT_SUMMARY_CHOICE_MAP, mapChoice=True)
|
|
56612
56658
|
elif myarg == 'summaryuser':
|
|
56613
56659
|
summaryUser = getString(Cmd.OB_STRING)
|
|
56660
|
+
elif myarg == 'pathdelimiter':
|
|
56661
|
+
pathDelimiter = getCharacter()
|
|
56614
56662
|
elif csvPF and myarg == 'addcsvdata':
|
|
56615
56663
|
k = getString(Cmd.OB_STRING)
|
|
56616
56664
|
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
@@ -56637,7 +56685,9 @@ def printShowFileCounts(users):
|
|
|
56637
56685
|
if showSize:
|
|
56638
56686
|
sortTitles.insert(sortTitles.index('Total')+1, 'Size')
|
|
56639
56687
|
if showLastModification:
|
|
56640
|
-
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56688
|
+
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56689
|
+
'lastModifiedFileMimeType', 'lastModifiedFilePath',
|
|
56690
|
+
'lastModifyingUser', 'lastModifiedTime'])
|
|
56641
56691
|
if addCSVData:
|
|
56642
56692
|
sortTitles.extend(sorted(addCSVData.keys()))
|
|
56643
56693
|
csvPF.SetTitles(sortTitles)
|
|
@@ -56652,9 +56702,7 @@ def printShowFileCounts(users):
|
|
|
56652
56702
|
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56653
56703
|
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56654
56704
|
mimeTypeInfo = {}
|
|
56655
|
-
userLastModification =
|
|
56656
|
-
'lastModifiedFileId': '', 'lastModifiedFileName': '',
|
|
56657
|
-
'lastModifyingUser': '', 'lastModifiedTime': NEVER_TIME}
|
|
56705
|
+
userLastModification = _initLastModification()
|
|
56658
56706
|
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
56659
56707
|
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count, query=DLP.fileIdEntity['query'])
|
|
56660
56708
|
try:
|
|
@@ -56666,7 +56714,7 @@ def printShowFileCounts(users):
|
|
|
56666
56714
|
retryReasons=[GAPI.UNKNOWN_ERROR],
|
|
56667
56715
|
q=DLP.fileIdEntity['query'],
|
|
56668
56716
|
fields=pagesFields, pageSize=GC.Values[GC.DRIVE_MAX_RESULTS], **btkwargs)
|
|
56669
|
-
for files in
|
|
56717
|
+
for files in feed:
|
|
56670
56718
|
for f_file in files:
|
|
56671
56719
|
driveId = f_file.get('driveId')
|
|
56672
56720
|
checkSharedDrivePermissions = getPermissionsForSharedDrives and driveId and 'permissions' not in f_file
|
|
@@ -56697,12 +56745,8 @@ def printShowFileCounts(users):
|
|
|
56697
56745
|
mimeTypeInfo[f_file['mimeType']]['count'] += 1
|
|
56698
56746
|
mimeTypeInfo[f_file['mimeType']]['size'] += int(f_file.get(sizeField, '0'))
|
|
56699
56747
|
if showLastModification:
|
|
56700
|
-
|
|
56701
|
-
|
|
56702
|
-
userLastModification['lastModifiedFileName'] = _stripControlCharsFromName(f_file['name'])
|
|
56703
|
-
userLastModification['lastModifiedTime'] = f_file['modifiedTime']
|
|
56704
|
-
userLastModification['lastModifyingUser'] = f_file['lastModifyingUser'].get('emailAddress',
|
|
56705
|
-
f_file['lastModifyingUser'].get('displayName', UNKNOWN))
|
|
56748
|
+
_checkUpdateLastModifiction(f_file, userLastModification)
|
|
56749
|
+
_getLastModificationPath(drive, userLastModification, pathDelimiter)
|
|
56706
56750
|
showMimeTypeInfo(user, mimeTypeInfo, sharedDriveId, sharedDriveName, userLastModification, i, count)
|
|
56707
56751
|
if showLastModification and userLastModification['lastModifiedTime'] > summaryLastModification['lastModifiedTime']:
|
|
56708
56752
|
summaryLastModification = userLastModification.copy()
|
|
@@ -56726,6 +56770,110 @@ def printShowFileCounts(users):
|
|
|
56726
56770
|
if csvPF:
|
|
56727
56771
|
csvPF.writeCSVfile('Drive File Counts')
|
|
56728
56772
|
|
|
56773
|
+
# gam <UserTypeEntity> print drivelastmodification [todrive <ToDriveAttribute>*]
|
|
56774
|
+
# [select <SharedDriveEntity>]
|
|
56775
|
+
# [pathdelimiter <Character>]
|
|
56776
|
+
# (addcsvdata <FieldName> <String>)*
|
|
56777
|
+
# gam <UserTypeEntity> show drivelastmodification
|
|
56778
|
+
# [select <SharedDriveEntity>]
|
|
56779
|
+
# [pathdelimiter <Character>]
|
|
56780
|
+
def printShowDrivelastModifications(users):
|
|
56781
|
+
def showLastModificationInfo(user, sharedDriveId, sharedDriveName, lastModification, i, count):
|
|
56782
|
+
if not csvPF:
|
|
56783
|
+
if sharedDriveId:
|
|
56784
|
+
kvList = [Ent.USER, user, Ent.SHAREDDRIVE, f'{sharedDriveName} ({sharedDriveId})']
|
|
56785
|
+
else:
|
|
56786
|
+
kvList = [Ent.USER, user]
|
|
56787
|
+
printEntity(kvList, i, count)
|
|
56788
|
+
Ind.Increment()
|
|
56789
|
+
_showLastModification(lastModification)
|
|
56790
|
+
Ind.Decrement()
|
|
56791
|
+
else:
|
|
56792
|
+
if sharedDriveId:
|
|
56793
|
+
row = {'User': user, 'id': sharedDriveId, 'name': sharedDriveName}
|
|
56794
|
+
else:
|
|
56795
|
+
row = {'User': user}
|
|
56796
|
+
_updateLastModificationRow(row, lastModification)
|
|
56797
|
+
if addCSVData:
|
|
56798
|
+
row.update(addCSVData)
|
|
56799
|
+
csvPF.WriteRowTitles(row)
|
|
56800
|
+
|
|
56801
|
+
csvPF = CSVPrintFile() if Act.csvFormat() else None
|
|
56802
|
+
fieldsList = ['id', 'driveId', 'name', 'mimeType', 'lastModifyingUser', 'modifiedTime', 'parents']
|
|
56803
|
+
DLP = DriveListParameters({'allowChoose': False, 'allowCorpora': False, 'allowQuery': False, 'mimeTypeInQuery': True})
|
|
56804
|
+
pathDelimiter = '/'
|
|
56805
|
+
sharedDriveId = sharedDriveName = ''
|
|
56806
|
+
fileIdEntity = {}
|
|
56807
|
+
addCSVData = {}
|
|
56808
|
+
while Cmd.ArgumentsRemaining():
|
|
56809
|
+
myarg = getArgument()
|
|
56810
|
+
if csvPF and myarg == 'todrive':
|
|
56811
|
+
csvPF.GetTodriveParameters()
|
|
56812
|
+
elif myarg == 'select':
|
|
56813
|
+
if fileIdEntity:
|
|
56814
|
+
usageErrorExit(Msg.CAN_NOT_BE_SPECIFIED_MORE_THAN_ONCE.format('select'))
|
|
56815
|
+
fileIdEntity = getSharedDriveEntity()
|
|
56816
|
+
elif myarg == 'pathdelimiter':
|
|
56817
|
+
pathDelimiter = getCharacter()
|
|
56818
|
+
elif csvPF and myarg == 'addcsvdata':
|
|
56819
|
+
k = getString(Cmd.OB_STRING)
|
|
56820
|
+
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
56821
|
+
else:
|
|
56822
|
+
unknownArgumentExit()
|
|
56823
|
+
if not fileIdEntity:
|
|
56824
|
+
fileIdEntity = DLP.GetFileIdEntity()
|
|
56825
|
+
if not fileIdEntity.get('shareddrive'):
|
|
56826
|
+
btkwargs = DLP.kwargs
|
|
56827
|
+
else:
|
|
56828
|
+
btkwargs = fileIdEntity['shareddrive']
|
|
56829
|
+
fieldsList.append('driveId')
|
|
56830
|
+
DLP.Finalize(fileIdEntity)
|
|
56831
|
+
if csvPF:
|
|
56832
|
+
sortTitles = ['User', 'id', 'name'] if fileIdEntity.get('shareddrive') else ['User']
|
|
56833
|
+
sortTitles.extend(['lastModifiedFileId', 'lastModifiedFileName',
|
|
56834
|
+
'lastModifiedFileMimeType', 'lastModifiedFilePath',
|
|
56835
|
+
'lastModifyingUser', 'lastModifiedTime'])
|
|
56836
|
+
if addCSVData:
|
|
56837
|
+
sortTitles.extend(sorted(addCSVData.keys()))
|
|
56838
|
+
csvPF.SetTitles(sortTitles)
|
|
56839
|
+
csvPF.SetSortAllTitles()
|
|
56840
|
+
pagesFields = getItemFieldsFromFieldsList('files', fieldsList)
|
|
56841
|
+
i, count, users = getEntityArgument(users)
|
|
56842
|
+
for user in users:
|
|
56843
|
+
i += 1
|
|
56844
|
+
user, drive = _validateUserSharedDrive(user, i, count, fileIdEntity)
|
|
56845
|
+
if not drive:
|
|
56846
|
+
continue
|
|
56847
|
+
sharedDriveId = fileIdEntity.get('shareddrive', {}).get('driveId', '')
|
|
56848
|
+
sharedDriveName = _getSharedDriveNameFromId(sharedDriveId) if sharedDriveId else ''
|
|
56849
|
+
userLastModification = _initLastModification()
|
|
56850
|
+
gettingEntity = _getGettingEntity(user, fileIdEntity)
|
|
56851
|
+
printGettingAllEntityItemsForWhom(Ent.DRIVE_FILE_OR_FOLDER, gettingEntity, i, count)
|
|
56852
|
+
try:
|
|
56853
|
+
feed = yieldGAPIpages(drive.files(), 'list', 'files',
|
|
56854
|
+
pageMessage=getPageMessageForWhom(),
|
|
56855
|
+
throwReasons=GAPI.DRIVE_USER_THROW_REASONS+[GAPI.INVALID, GAPI.BAD_REQUEST, GAPI.FILE_NOT_FOUND,
|
|
56856
|
+
GAPI.NOT_FOUND, GAPI.TEAMDRIVE_MEMBERSHIP_REQUIRED],
|
|
56857
|
+
retryReasons=[GAPI.UNKNOWN_ERROR],
|
|
56858
|
+
fields=pagesFields, pageSize=GC.Values[GC.DRIVE_MAX_RESULTS], **btkwargs)
|
|
56859
|
+
for files in feed:
|
|
56860
|
+
for f_file in files:
|
|
56861
|
+
_checkUpdateLastModifiction(f_file, userLastModification)
|
|
56862
|
+
_getLastModificationPath(drive, userLastModification, pathDelimiter)
|
|
56863
|
+
showLastModificationInfo(user, sharedDriveId, sharedDriveName, userLastModification, i, count)
|
|
56864
|
+
except (GAPI.invalid, GAPI.badRequest) as e:
|
|
56865
|
+
entityActionFailedWarning([Ent.USER, user, Ent.DRIVE_FILE_OR_FOLDER, None], str(e), i, count)
|
|
56866
|
+
continue
|
|
56867
|
+
except GAPI.fileNotFound:
|
|
56868
|
+
printGotEntityItemsForWhom(0)
|
|
56869
|
+
except (GAPI.notFound, GAPI.teamDriveMembershipRequired) as e:
|
|
56870
|
+
entityActionFailedWarning([Ent.USER, user, Ent.SHAREDDRIVE_ID, sharedDriveId], str(e), i, count)
|
|
56871
|
+
except (GAPI.serviceNotAvailable, GAPI.authError, GAPI.domainPolicy) as e:
|
|
56872
|
+
userDriveServiceNotEnabledWarning(user, str(e), i, count)
|
|
56873
|
+
continue
|
|
56874
|
+
if csvPF:
|
|
56875
|
+
csvPF.writeCSVfile('Drive File Last Modification')
|
|
56876
|
+
|
|
56729
56877
|
DISKUSAGE_SHOW_CHOICES = {'all', 'summary', 'summaryandtrash'}
|
|
56730
56878
|
|
|
56731
56879
|
# gam <UserTypeEntity> print diskusage <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
|
@@ -63090,7 +63238,8 @@ def createDriveFileACL(users, useDomainAdminAccess=False):
|
|
|
63090
63238
|
if showDetails:
|
|
63091
63239
|
_showDriveFilePermission(permission, printKeys, timeObjects)
|
|
63092
63240
|
except (GAPI.badRequest, GAPI.invalid, GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
|
|
63093
|
-
GAPI.cannotSetExpiration, GAPI.
|
|
63241
|
+
GAPI.cannotSetExpiration, GAPI.cannotSetExpirationOnAnyoneOrDomain,
|
|
63242
|
+
GAPI.expirationDateNotAllowedForSharedDriveMembers, GAPI.expirationDatesMustBeInTheFuture,
|
|
63094
63243
|
GAPI.insufficientFilePermissions, GAPI.unknownError, GAPI.ownershipChangeAcrossDomainNotPermitted,
|
|
63095
63244
|
GAPI.teamDriveDomainUsersOnlyRestriction, GAPI.teamDriveTeamMembersOnlyRestriction,
|
|
63096
63245
|
GAPI.targetUserRoleLimitedByLicenseRestriction, GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded,
|
|
@@ -63225,7 +63374,8 @@ def updateDriveFileACLs(users, useDomainAdminAccess=False):
|
|
|
63225
63374
|
if showDetails:
|
|
63226
63375
|
_showDriveFilePermission(permission, printKeys, timeObjects)
|
|
63227
63376
|
except (GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError, GAPI.insufficientFilePermissions, GAPI.unknownError,
|
|
63228
|
-
GAPI.cannotSetExpiration, GAPI.
|
|
63377
|
+
GAPI.cannotSetExpiration, GAPI.cannotSetExpirationOnAnyoneOrDomain,
|
|
63378
|
+
GAPI.expirationDateNotAllowedForSharedDriveMembers, GAPI.expirationDatesMustBeInTheFuture,
|
|
63229
63379
|
GAPI.badRequest, GAPI.invalidOwnershipTransfer, GAPI.cannotRemoveOwner,
|
|
63230
63380
|
GAPI.fileNeverWritable, GAPI.ownershipChangeAcrossDomainNotPermitted, GAPI.sharingRateLimitExceeded,
|
|
63231
63381
|
GAPI.targetUserRoleLimitedByLicenseRestriction, GAPI.insufficientAdministratorPrivileges,
|
|
@@ -63325,7 +63475,8 @@ def createDriveFilePermissions(users, useDomainAdminAccess=False):
|
|
|
63325
63475
|
body=_makePermissionBody(ri[RI_ITEM]), fields='', supportsAllDrives=True)
|
|
63326
63476
|
entityActionPerformed([Ent.DRIVE_FILE_OR_FOLDER_ID, ri[RI_ENTITY], Ent.PERMITTEE, ri[RI_ITEM]], int(ri[RI_J]), int(ri[RI_JCOUNT]))
|
|
63327
63477
|
except (GAPI.badRequest, GAPI.invalid, GAPI.fileNotFound, GAPI.forbidden, GAPI.internalError,
|
|
63328
|
-
GAPI.cannotSetExpiration, GAPI.
|
|
63478
|
+
GAPI.cannotSetExpiration, GAPI.cannotSetExpirationOnAnyoneOrDomain,
|
|
63479
|
+
GAPI.expirationDateNotAllowedForSharedDriveMembers, GAPI.expirationDatesMustBeInTheFuture,
|
|
63329
63480
|
GAPI.insufficientFilePermissions, GAPI.unknownError, GAPI.ownershipChangeAcrossDomainNotPermitted,
|
|
63330
63481
|
GAPI.teamDriveDomainUsersOnlyRestriction, GAPI.teamDriveTeamMembersOnlyRestriction,
|
|
63331
63482
|
GAPI.targetUserRoleLimitedByLicenseRestriction, GAPI.insufficientAdministratorPrivileges, GAPI.sharingRateLimitExceeded,
|
|
@@ -76540,6 +76691,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76540
76691
|
Cmd.ARG_DRIVEFILEACL: printShowDriveFileACLs,
|
|
76541
76692
|
Cmd.ARG_DRIVELABEL: printShowDriveLabels,
|
|
76542
76693
|
Cmd.ARG_DRIVELABELPERMISSION: printShowDriveLabelPermissions,
|
|
76694
|
+
Cmd.ARG_DRIVELASTMODIFICATION: printShowDrivelastModifications,
|
|
76543
76695
|
Cmd.ARG_DRIVESETTINGS: printShowDriveSettings,
|
|
76544
76696
|
Cmd.ARG_EMPTYDRIVEFOLDERS: printEmptyDriveFolders,
|
|
76545
76697
|
Cmd.ARG_EVENT: printShowCalendarEvents,
|
|
@@ -76647,6 +76799,7 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76647
76799
|
Cmd.ARG_DRIVEFILEACL: printShowDriveFileACLs,
|
|
76648
76800
|
Cmd.ARG_DRIVELABEL: printShowDriveLabels,
|
|
76649
76801
|
Cmd.ARG_DRIVELABELPERMISSION: printShowDriveLabelPermissions,
|
|
76802
|
+
Cmd.ARG_DRIVELASTMODIFICATION: printShowDrivelastModifications,
|
|
76650
76803
|
Cmd.ARG_DRIVESETTINGS: printShowDriveSettings,
|
|
76651
76804
|
Cmd.ARG_EVENT: printShowCalendarEvents,
|
|
76652
76805
|
Cmd.ARG_FILECOMMENT: printShowFileComments,
|
|
@@ -76871,13 +77024,14 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
76871
77024
|
Cmd.ARG_DOMAINCONTACT: Cmd.ARG_PEOPLECONTACT,
|
|
76872
77025
|
Cmd.ARG_DOMAINCONTACTS: Cmd.ARG_PEOPLECONTACT,
|
|
76873
77026
|
Cmd.ARG_DRIVEFILEACLS: Cmd.ARG_DRIVEFILEACL,
|
|
76874
|
-
Cmd.ARG_FILEDRIVELABELS: Cmd.ARG_FILEDRIVELABEL,
|
|
76875
77027
|
Cmd.ARG_DRIVEFILESHORTCUTS: Cmd.ARG_DRIVEFILESHORTCUT,
|
|
76876
77028
|
Cmd.ARG_DRIVELABELS: Cmd.ARG_DRIVELABEL,
|
|
76877
77029
|
Cmd.ARG_DRIVELABELPERMISSIONS: Cmd.ARG_DRIVELABELPERMISSION,
|
|
77030
|
+
Cmd.ARG_DRIVELASTMODIFICATIONS: Cmd.ARG_DRIVELASTMODIFICATION,
|
|
76878
77031
|
Cmd.ARG_EVENTS: Cmd.ARG_EVENT,
|
|
76879
77032
|
Cmd.ARG_FILECOMMENTS: Cmd.ARG_FILECOMMENT,
|
|
76880
77033
|
Cmd.ARG_FILECOUNTS: Cmd.ARG_FILECOUNT,
|
|
77034
|
+
Cmd.ARG_FILEDRIVELABELS: Cmd.ARG_FILEDRIVELABEL,
|
|
76881
77035
|
Cmd.ARG_FILEPATHS: Cmd.ARG_FILEPATH,
|
|
76882
77036
|
Cmd.ARG_FILEREVISIONS: Cmd.ARG_FILEREVISION,
|
|
76883
77037
|
Cmd.ARG_FILESHARECOUNTS: Cmd.ARG_FILESHARECOUNT,
|
gam/gamlib/glclargs.py
CHANGED
|
@@ -579,6 +579,8 @@ class GamCLArgs():
|
|
|
579
579
|
ARG_DRIVELABELS = 'drivelabels'
|
|
580
580
|
ARG_DRIVELABELPERMISSION = 'drivelabelpermission'
|
|
581
581
|
ARG_DRIVELABELPERMISSIONS = 'drivelabelpermissions'
|
|
582
|
+
ARG_DRIVELASTMODIFICATION = 'drivelastmodification'
|
|
583
|
+
ARG_DRIVELASTMODIFICATIONS = 'drivelastmodifications'
|
|
582
584
|
ARG_DRIVESETTINGS = 'drivesettings'
|
|
583
585
|
ARG_DRIVETRASH = 'drivetrash'
|
|
584
586
|
ARG_EMPTYDRIVEFOLDERS = 'emptydrivefolders'
|
gam/gamlib/glgapi.py
CHANGED
|
@@ -48,6 +48,7 @@ CANNOT_MOVE_TRASHED_ITEM_INTO_TEAMDRIVE = 'cannotMoveTrashedItemIntoTeamDrive'
|
|
|
48
48
|
CANNOT_MOVE_TRASHED_ITEM_OUT_OF_TEAMDRIVE = 'cannotMoveTrashedItemOutOfTeamDrive'
|
|
49
49
|
CANNOT_REMOVE_OWNER = 'cannotRemoveOwner'
|
|
50
50
|
CANNOT_SET_EXPIRATION = 'cannotSetExpiration'
|
|
51
|
+
CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN = 'cannotSetExpirationOnAnyoneOrDomain'
|
|
51
52
|
CANNOT_SHARE_GROUPS_WITHLINK = 'cannotShareGroupsWithLink'
|
|
52
53
|
CANNOT_SHARE_USERS_WITHLINK = 'cannotShareUsersWithLink'
|
|
53
54
|
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS = 'cannotShareTeamDriveTopFolderWithAnyoneOrDomains'
|
|
@@ -71,6 +72,7 @@ DOMAIN_POLICY = 'domainPolicy'
|
|
|
71
72
|
DOWNLOAD_QUOTA_EXCEEDED = 'downloadQuotaExceeded'
|
|
72
73
|
DUPLICATE = 'duplicate'
|
|
73
74
|
EVENT_DURATION_EXCEEDS_LIMIT = 'eventDurationExceedsLimit'
|
|
75
|
+
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE = 'expirationDatesMustBeInTheFuture'
|
|
74
76
|
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS = 'expirationDateNotAllowedForSharedDriveMembers'
|
|
75
77
|
FAILED_PRECONDITION = 'failedPrecondition'
|
|
76
78
|
FIELD_IN_USE = 'fieldInUse'
|
|
@@ -211,7 +213,8 @@ DRIVE_COPY_THROW_REASONS = DRIVE_ACCESS_THROW_REASONS+[CANNOT_COPY_FILE, BAD_REQ
|
|
|
211
213
|
STORAGE_QUOTA_EXCEEDED, TEAMDRIVE_FILE_LIMIT_EXCEEDED, TEAMDRIVE_HIERARCHY_TOO_DEEP]
|
|
212
214
|
DRIVE_GET_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, DOWNLOAD_QUOTA_EXCEEDED]
|
|
213
215
|
DRIVE3_CREATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID, INVALID_SHARING_REQUEST, OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED,
|
|
214
|
-
CANNOT_SET_EXPIRATION,
|
|
216
|
+
CANNOT_SET_EXPIRATION, CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN,
|
|
217
|
+
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE, EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS,
|
|
215
218
|
NOT_FOUND, TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION, TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION,
|
|
216
219
|
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION, INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
217
220
|
PUBLISH_OUT_NOT_PERMITTED, SHARE_IN_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED, SHARE_OUT_NOT_PERMITTED_TO_USER,
|
|
@@ -228,7 +231,8 @@ DRIVE3_GET_ACL_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, FORBIDDEN, IN
|
|
|
228
231
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
|
229
232
|
UNKNOWN_ERROR, INVALID]
|
|
230
233
|
DRIVE3_UPDATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID_OWNERSHIP_TRANSFER, CANNOT_REMOVE_OWNER,
|
|
231
|
-
CANNOT_SET_EXPIRATION,
|
|
234
|
+
CANNOT_SET_EXPIRATION, CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN,
|
|
235
|
+
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE, EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS,
|
|
232
236
|
OWNERSHIP_CHANGE_ACROSS_DOMAIN_NOT_PERMITTED,
|
|
233
237
|
NOT_FOUND, TEAMDRIVE_DOMAIN_USERS_ONLY_RESTRICTION, TEAMDRIVE_TEAM_MEMBERS_ONLY_RESTRICTION,
|
|
234
238
|
TARGET_USER_ROLE_LIMITED_BY_LICENSE_RESTRICTION, INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
|
@@ -300,6 +304,7 @@ REASON_MESSAGE_MAP = {
|
|
|
300
304
|
('userId', USER_NOT_FOUND),
|
|
301
305
|
('memberKey', INVALID_MEMBER),
|
|
302
306
|
('A system error has occurred', SYSTEM_ERROR),
|
|
307
|
+
('Expiration dates must be in the future', EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE),
|
|
303
308
|
('Invalid attribute value', INVALID_ATTRIBUTE_VALUE),
|
|
304
309
|
('Invalid Customer Id', INVALID_CUSTOMER_ID),
|
|
305
310
|
('Invalid Input: INVALID_OU_ID', INVALID_ORGUNIT),
|
|
@@ -405,6 +410,8 @@ class cannotRemoveOwner(Exception):
|
|
|
405
410
|
pass
|
|
406
411
|
class cannotSetExpiration(Exception):
|
|
407
412
|
pass
|
|
413
|
+
class cannotSetExpirationOnAnyoneOrDomain(Exception):
|
|
414
|
+
pass
|
|
408
415
|
class cannotShareGroupsWithLink(Exception):
|
|
409
416
|
pass
|
|
410
417
|
class cannotShareUsersWithLink(Exception):
|
|
@@ -449,6 +456,8 @@ class duplicate(Exception):
|
|
|
449
456
|
pass
|
|
450
457
|
class eventDurationExceedsLimit(Exception):
|
|
451
458
|
pass
|
|
459
|
+
class expirationDatesMustBeInTheFuture(Exception):
|
|
460
|
+
pass
|
|
452
461
|
class expirationDateNotAllowedForSharedDriveMembers(Exception):
|
|
453
462
|
pass
|
|
454
463
|
class failedPrecondition(Exception):
|
|
@@ -690,6 +699,7 @@ REASON_EXCEPTION_MAP = {
|
|
|
690
699
|
CANNOT_MOVE_TRASHED_ITEM_OUT_OF_TEAMDRIVE: cannotMoveTrashedItemOutOfTeamDrive,
|
|
691
700
|
CANNOT_REMOVE_OWNER: cannotRemoveOwner,
|
|
692
701
|
CANNOT_SET_EXPIRATION: cannotSetExpiration,
|
|
702
|
+
CANNOT_SET_EXPIRATION_ON_ANYONE_OR_DOMAIN: cannotSetExpirationOnAnyoneOrDomain,
|
|
693
703
|
CANNOT_SHARE_GROUPS_WITHLINK: cannotShareGroupsWithLink,
|
|
694
704
|
CANNOT_SHARE_USERS_WITHLINK: cannotShareUsersWithLink,
|
|
695
705
|
CANNOT_SHARE_TEAMDRIVE_TOPFOLDER_WITH_ANYONEORDOMAINS: cannotShareTeamDriveTopFolderWithAnyoneOrDomains,
|
|
@@ -712,6 +722,7 @@ REASON_EXCEPTION_MAP = {
|
|
|
712
722
|
DOWNLOAD_QUOTA_EXCEEDED: downloadQuotaExceeded,
|
|
713
723
|
DUPLICATE: duplicate,
|
|
714
724
|
EVENT_DURATION_EXCEEDS_LIMIT: eventDurationExceedsLimit,
|
|
725
|
+
EXPIRATION_DATES_MUST_BE_IN_THE_FUTURE: expirationDatesMustBeInTheFuture,
|
|
715
726
|
EXPIRATION_DATE_NOT_ALLOWED_FOR_SHARED_DRIVE_MEMBERS: expirationDateNotAllowedForSharedDriveMembers,
|
|
716
727
|
FAILED_PRECONDITION: failedPrecondition,
|
|
717
728
|
FIELD_IN_USE: fieldInUse,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=vIhIHMTCE_RPsHE4XjMLfawKthZe2aIUZEC0vG5UQdo,3492241
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=nJuWha0xm5dHw_5ptGphwRoO-r36Ccpqiww9pCEDbSc,67484
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -25,9 +25,9 @@ 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=EAQXkaM13t6jjh9vL4eHJqIZRI5kmzeneiFs5xcWXfg,34304
|
|
27
27
|
gam/gamlib/glcfg.py,sha256=cV011FpIWge4oi5_dJrdof66vUqX6UCvTGWWTNVmYEg,28055
|
|
28
|
-
gam/gamlib/glclargs.py,sha256=
|
|
28
|
+
gam/gamlib/glclargs.py,sha256=9i8FVqQmidkgazG7sOKrY-JeyhK8JioxVZMyClgCafY,42306
|
|
29
29
|
gam/gamlib/glentity.py,sha256=ZLbyMl9NhN-MBf9Rxmho2dBYeS4SNLMctpeaKFZSbQ4,33801
|
|
30
|
-
gam/gamlib/glgapi.py,sha256=
|
|
30
|
+
gam/gamlib/glgapi.py,sha256=xk3pEaIE-zHrTNCn5rJYERqqpbN55E1wXlKoqvWP44E,39232
|
|
31
31
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
32
32
|
gam/gamlib/glglobals.py,sha256=Y73xM1RNhIbtcqnMv1gcZF3wDWOeLWW-7SvoQyWw6tA,9659
|
|
33
33
|
gam/gamlib/glindent.py,sha256=RfBa2LDfLIqPLL5vMfC689TCVmqn8xf-qulSzkiatrc,1228
|
|
@@ -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.6.
|
|
69
|
-
gam7-7.6.
|
|
70
|
-
gam7-7.6.
|
|
71
|
-
gam7-7.6.
|
|
72
|
-
gam7-7.6.
|
|
68
|
+
gam7-7.6.2.dist-info/METADATA,sha256=yNoAOO-39l1sEB9iwZpcvlKKWwndhqxl1YO3Dl8SS4g,2888
|
|
69
|
+
gam7-7.6.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
70
|
+
gam7-7.6.2.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
71
|
+
gam7-7.6.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
72
|
+
gam7-7.6.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|