mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 21:01:36 +00:00
Multiple updates (#910)
* Use integer division to get minutes * Update to latest Drive API * Clean up language output formatting; encode control characters in mobile deviceId
This commit is contained in:
48
src/gam.py
48
src/gam.py
@@ -4198,7 +4198,7 @@ def showDriveFileACL(users):
|
|||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
feed = callGAPIpages(drive.permissions(), 'list', 'permissions',
|
feed = callGAPIpages(drive.permissions(), 'list', 'permissions',
|
||||||
fileId=fileId, fields='*', supportsTeamDrives=True,
|
fileId=fileId, fields='*', supportsAllDrives=True,
|
||||||
useDomainAdminAccess=useDomainAdminAccess)
|
useDomainAdminAccess=useDomainAdminAccess)
|
||||||
for permission in feed:
|
for permission in feed:
|
||||||
printPermission(permission)
|
printPermission(permission)
|
||||||
@@ -4239,7 +4239,7 @@ def delDriveFileACL(users):
|
|||||||
continue
|
continue
|
||||||
print('Removing permission for %s from %s' % (permissionId, fileId))
|
print('Removing permission for %s from %s' % (permissionId, fileId))
|
||||||
callGAPI(drive.permissions(), 'delete', fileId=fileId,
|
callGAPI(drive.permissions(), 'delete', fileId=fileId,
|
||||||
permissionId=permissionId, supportsTeamDrives=True,
|
permissionId=permissionId, supportsAllDrives=True,
|
||||||
useDomainAdminAccess=useDomainAdminAccess)
|
useDomainAdminAccess=useDomainAdminAccess)
|
||||||
|
|
||||||
DRIVEFILE_ACL_ROLES_MAP = {
|
DRIVEFILE_ACL_ROLES_MAP = {
|
||||||
@@ -4309,7 +4309,7 @@ def addDriveFileACL(users):
|
|||||||
continue
|
continue
|
||||||
result = callGAPI(drive.permissions(), 'create', fields='*',
|
result = callGAPI(drive.permissions(), 'create', fields='*',
|
||||||
fileId=fileId, sendNotificationEmail=sendNotificationEmail,
|
fileId=fileId, sendNotificationEmail=sendNotificationEmail,
|
||||||
emailMessage=emailMessage, body=body, supportsTeamDrives=True,
|
emailMessage=emailMessage, body=body, supportsAllDrives=True,
|
||||||
transferOwnership=transferOwnership,
|
transferOwnership=transferOwnership,
|
||||||
useDomainAdminAccess=useDomainAdminAccess)
|
useDomainAdminAccess=useDomainAdminAccess)
|
||||||
printPermission(result)
|
printPermission(result)
|
||||||
@@ -4348,7 +4348,7 @@ def updateDriveFileACL(users):
|
|||||||
result = callGAPI(drive.permissions(), 'update', fields='*',
|
result = callGAPI(drive.permissions(), 'update', fields='*',
|
||||||
fileId=fileId, permissionId=permissionId, removeExpiration=removeExpiration,
|
fileId=fileId, permissionId=permissionId, removeExpiration=removeExpiration,
|
||||||
transferOwnership=transferOwnership, body=body,
|
transferOwnership=transferOwnership, body=body,
|
||||||
supportsTeamDrives=True, useDomainAdminAccess=useDomainAdminAccess)
|
supportsAllDrives=True, useDomainAdminAccess=useDomainAdminAccess)
|
||||||
printPermission(result)
|
printPermission(result)
|
||||||
|
|
||||||
def _stripMeInOwners(query):
|
def _stripMeInOwners(query):
|
||||||
@@ -4549,7 +4549,7 @@ def deleteDriveFile(users):
|
|||||||
for fileId in file_ids:
|
for fileId in file_ids:
|
||||||
i += 1
|
i += 1
|
||||||
print('%s %s for %s (%s/%s)' % (action, fileId, user, i, len(file_ids)))
|
print('%s %s for %s (%s/%s)' % (action, fileId, user, i, len(file_ids)))
|
||||||
callGAPI(drive.files(), function, fileId=fileId, supportsTeamDrives=True)
|
callGAPI(drive.files(), function, fileId=fileId, supportsAllDrives=True)
|
||||||
|
|
||||||
def printDriveFolderContents(feed, folderId, indent):
|
def printDriveFolderContents(feed, folderId, indent):
|
||||||
for f_file in feed:
|
for f_file in feed:
|
||||||
@@ -4766,14 +4766,14 @@ def doUpdateDriveFile(users):
|
|||||||
ocr=parameters[DFA_OCR],
|
ocr=parameters[DFA_OCR],
|
||||||
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
||||||
media_body=media_body, body=body, fields='id',
|
media_body=media_body, body=body, fields='id',
|
||||||
supportsTeamDrives=True)
|
supportsAllDrives=True)
|
||||||
print('Successfully updated %s drive file with content from %s' % (result['id'], parameters[DFA_LOCALFILENAME]))
|
print('Successfully updated %s drive file with content from %s' % (result['id'], parameters[DFA_LOCALFILENAME]))
|
||||||
else:
|
else:
|
||||||
result = callGAPI(drive.files(), 'patch',
|
result = callGAPI(drive.files(), 'patch',
|
||||||
fileId=fileId, convert=parameters[DFA_CONVERT],
|
fileId=fileId, convert=parameters[DFA_CONVERT],
|
||||||
ocr=parameters[DFA_OCR],
|
ocr=parameters[DFA_OCR],
|
||||||
ocrLanguage=parameters[DFA_OCRLANGUAGE], body=body,
|
ocrLanguage=parameters[DFA_OCRLANGUAGE], body=body,
|
||||||
fields='id', supportsTeamDrives=True)
|
fields='id', supportsAllDrives=True)
|
||||||
print('Successfully updated drive file/folder ID %s' % (result['id']))
|
print('Successfully updated drive file/folder ID %s' % (result['id']))
|
||||||
else:
|
else:
|
||||||
for fileId in fileIdSelection['fileIds']:
|
for fileId in fileIdSelection['fileIds']:
|
||||||
@@ -4781,7 +4781,7 @@ def doUpdateDriveFile(users):
|
|||||||
fileId=fileId, convert=parameters[DFA_CONVERT],
|
fileId=fileId, convert=parameters[DFA_CONVERT],
|
||||||
ocr=parameters[DFA_OCR],
|
ocr=parameters[DFA_OCR],
|
||||||
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
||||||
body=body, fields='id', supportsTeamDrives=True)
|
body=body, fields='id', supportsAllDrives=True)
|
||||||
print('Successfully copied %s to %s' % (fileId, result['id']))
|
print('Successfully copied %s to %s' % (fileId, result['id']))
|
||||||
|
|
||||||
def createDriveFile(users):
|
def createDriveFile(users):
|
||||||
@@ -4819,7 +4819,7 @@ def createDriveFile(users):
|
|||||||
convert=parameters[DFA_CONVERT], ocr=parameters[DFA_OCR],
|
convert=parameters[DFA_CONVERT], ocr=parameters[DFA_OCR],
|
||||||
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
ocrLanguage=parameters[DFA_OCRLANGUAGE],
|
||||||
media_body=media_body, body=body, fields='id,title,mimeType',
|
media_body=media_body, body=body, fields='id,title,mimeType',
|
||||||
supportsTeamDrives=True)
|
supportsAllDrives=True)
|
||||||
titleInfo = '{0}({1})'.format(result['title'], result['id'])
|
titleInfo = '{0}({1})'.format(result['title'], result['id'])
|
||||||
if csv_output:
|
if csv_output:
|
||||||
csv_rows.append({'User': user, 'title': result['title'], 'id': result['id']})
|
csv_rows.append({'User': user, 'title': result['title'], 'id': result['id']})
|
||||||
@@ -4916,7 +4916,7 @@ def downloadDriveFile(users):
|
|||||||
for fileId in fileIdSelection['fileIds']:
|
for fileId in fileIdSelection['fileIds']:
|
||||||
fileExtension = None
|
fileExtension = None
|
||||||
result = callGAPI(drive.files(), 'get',
|
result = callGAPI(drive.files(), 'get',
|
||||||
fileId=fileId, fields='fileExtension,fileSize,mimeType,title', supportsTeamDrives=True)
|
fileId=fileId, fields='fileExtension,fileSize,mimeType,title', supportsAllDrives=True)
|
||||||
fileExtension = result.get('fileExtension')
|
fileExtension = result.get('fileExtension')
|
||||||
mimeType = result['mimeType']
|
mimeType = result['mimeType']
|
||||||
if mimeType == MIMETYPE_GA_FOLDER:
|
if mimeType == MIMETYPE_GA_FOLDER:
|
||||||
@@ -5050,7 +5050,7 @@ def showDriveFileInfo(users):
|
|||||||
user, drive = buildDriveGAPIObject(user)
|
user, drive = buildDriveGAPIObject(user)
|
||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
feed = callGAPI(drive.files(), 'get', fileId=fileId, fields=fields, supportsTeamDrives=True)
|
feed = callGAPI(drive.files(), 'get', fileId=fileId, fields=fields, supportsAllDrives=True)
|
||||||
if feed:
|
if feed:
|
||||||
print_json(None, feed)
|
print_json(None, feed)
|
||||||
|
|
||||||
@@ -5241,7 +5241,7 @@ def doLanguage(users):
|
|||||||
user, gmail = buildGmailGAPIObject(user)
|
user, gmail = buildGmailGAPIObject(user)
|
||||||
if not gmail:
|
if not gmail:
|
||||||
continue
|
continue
|
||||||
print('Setting language to %s for %s' % (displayLanguage, user))
|
print('Setting language to %s for %s (%s/%s)' % (displayLanguage, user, i, count))
|
||||||
result = callGAPI(gmail.users().settings(), 'updateLanguage', userId='me', body={'displayLanguage': displayLanguage})
|
result = callGAPI(gmail.users().settings(), 'updateLanguage', userId='me', body={'displayLanguage': displayLanguage})
|
||||||
print('Language is set to %s for %s' % (result['displayLanguage'], user))
|
print('Language is set to %s for %s' % (result['displayLanguage'], user))
|
||||||
|
|
||||||
@@ -5257,7 +5257,7 @@ def getLanguage(users):
|
|||||||
soft_errors=True,
|
soft_errors=True,
|
||||||
userId='me')
|
userId='me')
|
||||||
if result:
|
if result:
|
||||||
print('User: {0}, Language: {1}'.format(user, result['displayLanguage']))
|
print('User: {0}, Language: {1} ({2}/{3})'.format(user, result['displayLanguage']), i, count)
|
||||||
|
|
||||||
def getImap(users):
|
def getImap(users):
|
||||||
i = 0
|
i = 0
|
||||||
@@ -7829,7 +7829,7 @@ def doGetTeamDriveInfo(users):
|
|||||||
if not drive:
|
if not drive:
|
||||||
print('Failed to access Drive as %s' % user)
|
print('Failed to access Drive as %s' % user)
|
||||||
continue
|
continue
|
||||||
result = callGAPI(drive.teamdrives(), 'get', teamDriveId=teamDriveId,
|
result = callGAPI(drive.drives(), 'get', driveId=teamDriveId,
|
||||||
useDomainAdminAccess=useDomainAdminAccess, fields='*')
|
useDomainAdminAccess=useDomainAdminAccess, fields='*')
|
||||||
print_json(None, result)
|
print_json(None, result)
|
||||||
|
|
||||||
@@ -7849,7 +7849,7 @@ def doCreateTeamDrive(users):
|
|||||||
print('Failed to access Drive as %s' % user)
|
print('Failed to access Drive as %s' % user)
|
||||||
continue
|
continue
|
||||||
requestId = str(uuid.uuid4())
|
requestId = str(uuid.uuid4())
|
||||||
result = callGAPI(drive.teamdrives(), 'create', requestId=requestId, body=body, fields='id')
|
result = callGAPI(drive.drives(), 'create', requestId=requestId, body=body, fields='id')
|
||||||
print('Created Team Drive %s with id %s' % (body['name'], result['id']))
|
print('Created Team Drive %s with id %s' % (body['name'], result['id']))
|
||||||
|
|
||||||
TEAMDRIVE_RESTRICTIONS_MAP = {
|
TEAMDRIVE_RESTRICTIONS_MAP = {
|
||||||
@@ -7898,8 +7898,8 @@ def doUpdateTeamDrive(users):
|
|||||||
user, drive = buildDrive3GAPIObject(user)
|
user, drive = buildDrive3GAPIObject(user)
|
||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
result = callGAPI(drive.teamdrives(), 'update',
|
result = callGAPI(drive.drives(), 'update',
|
||||||
useDomainAdminAccess=useDomainAdminAccess, body=body, teamDriveId=teamDriveId, fields='id', soft_errors=True)
|
useDomainAdminAccess=useDomainAdminAccess, body=body, driveId=teamDriveId, fields='id', soft_errors=True)
|
||||||
if not result:
|
if not result:
|
||||||
continue
|
continue
|
||||||
print('Updated Team Drive %s' % (teamDriveId))
|
print('Updated Team Drive %s' % (teamDriveId))
|
||||||
@@ -7928,7 +7928,7 @@ def printShowTeamDrives(users, csvFormat):
|
|||||||
user, drive = buildDrive3GAPIObject(user)
|
user, drive = buildDrive3GAPIObject(user)
|
||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
results = callGAPIpages(drive.teamdrives(), 'list', 'teamDrives',
|
results = callGAPIpages(drive.drives(), 'list', 'drives',
|
||||||
useDomainAdminAccess=useDomainAdminAccess, fields='*',
|
useDomainAdminAccess=useDomainAdminAccess, fields='*',
|
||||||
q=q, soft_errors=True)
|
q=q, soft_errors=True)
|
||||||
if not results:
|
if not results:
|
||||||
@@ -7956,7 +7956,7 @@ def doDeleteTeamDrive(users):
|
|||||||
if not drive:
|
if not drive:
|
||||||
continue
|
continue
|
||||||
print('Deleting Team Drive %s' % (teamDriveId))
|
print('Deleting Team Drive %s' % (teamDriveId))
|
||||||
callGAPI(drive.teamdrives(), 'delete', teamDriveId=teamDriveId, soft_errors=True)
|
callGAPI(drive.drives(), 'delete', driveId=teamDriveId, soft_errors=True)
|
||||||
|
|
||||||
def validateCollaborators(collaboratorList, cd):
|
def validateCollaborators(collaboratorList, cd):
|
||||||
collaborators = []
|
collaborators = []
|
||||||
@@ -10105,7 +10105,7 @@ def doGetCrosInfo():
|
|||||||
print(' date: {0}'.format(activeTimeRange['date']))
|
print(' date: {0}'.format(activeTimeRange['date']))
|
||||||
print(' activeTime: {0}'.format(str(activeTimeRange['activeTime'])))
|
print(' activeTime: {0}'.format(str(activeTimeRange['activeTime'])))
|
||||||
print(' duration: {0}'.format(utils.formatMilliSeconds(activeTimeRange['activeTime'])))
|
print(' duration: {0}'.format(utils.formatMilliSeconds(activeTimeRange['activeTime'])))
|
||||||
print(' minutes: {0}'.format(activeTimeRange['activeTime']/60000))
|
print(' minutes: {0}'.format(activeTimeRange['activeTime']//60000))
|
||||||
recentUsers = cros.get('recentUsers', [])
|
recentUsers = cros.get('recentUsers', [])
|
||||||
lenRU = len(recentUsers)
|
lenRU = len(recentUsers)
|
||||||
if lenRU:
|
if lenRU:
|
||||||
@@ -10172,6 +10172,8 @@ def doGetMobileInfo():
|
|||||||
cd = buildGAPIObject('directory')
|
cd = buildGAPIObject('directory')
|
||||||
resourceId = sys.argv[3]
|
resourceId = sys.argv[3]
|
||||||
info = callGAPI(cd.mobiledevices(), 'get', customerId=GC_Values[GC_CUSTOMER_ID], resourceId=resourceId)
|
info = callGAPI(cd.mobiledevices(), 'get', customerId=GC_Values[GC_CUSTOMER_ID], resourceId=resourceId)
|
||||||
|
if 'deviceId' in info:
|
||||||
|
info['deviceId'] = info['deviceId'].encode('unicode-escape').decode(UTF8)
|
||||||
print_json(None, info)
|
print_json(None, info)
|
||||||
|
|
||||||
def print_json(object_name, object_value, spacing=''):
|
def print_json(object_name, object_value, spacing=''):
|
||||||
@@ -11866,6 +11868,8 @@ def doPrintMobileDevices():
|
|||||||
appDetails.append('<None>')
|
appDetails.append('<None>')
|
||||||
applications.append('-'.join(appDetails))
|
applications.append('-'.join(appDetails))
|
||||||
row[attrib] = delimiter.join(applications)
|
row[attrib] = delimiter.join(applications)
|
||||||
|
elif attrib == 'deviceId':
|
||||||
|
row[attrib] = mobile[attrib].encode('unicode-escape').decode(UTF8)
|
||||||
else:
|
else:
|
||||||
if attrib not in titles:
|
if attrib not in titles:
|
||||||
titles.append(attrib)
|
titles.append(attrib)
|
||||||
@@ -11957,7 +11961,7 @@ def doPrintCrosActivity():
|
|||||||
new_row = row.copy()
|
new_row = row.copy()
|
||||||
new_row['activeTimeRanges.date'] = activeTimeRange['date']
|
new_row['activeTimeRanges.date'] = activeTimeRange['date']
|
||||||
new_row['activeTimeRanges.duration'] = utils.formatMilliSeconds(activeTimeRange['activeTime'])
|
new_row['activeTimeRanges.duration'] = utils.formatMilliSeconds(activeTimeRange['activeTime'])
|
||||||
new_row['activeTimeRanges.minutes'] = activeTimeRange['activeTime']/60000
|
new_row['activeTimeRanges.minutes'] = activeTimeRange['activeTime']//60000
|
||||||
csvRows.append(new_row)
|
csvRows.append(new_row)
|
||||||
if selectRecentUsers:
|
if selectRecentUsers:
|
||||||
recentUsers = cros.get('recentUsers', [])
|
recentUsers = cros.get('recentUsers', [])
|
||||||
@@ -12147,7 +12151,7 @@ def doPrintCrosDevices():
|
|||||||
new_row['activeTimeRanges.date'] = activeTimeRanges[i]['date']
|
new_row['activeTimeRanges.date'] = activeTimeRanges[i]['date']
|
||||||
new_row['activeTimeRanges.activeTime'] = str(activeTimeRanges[i]['activeTime'])
|
new_row['activeTimeRanges.activeTime'] = str(activeTimeRanges[i]['activeTime'])
|
||||||
new_row['activeTimeRanges.duration'] = utils.formatMilliSeconds(activeTimeRanges[i]['activeTime'])
|
new_row['activeTimeRanges.duration'] = utils.formatMilliSeconds(activeTimeRanges[i]['activeTime'])
|
||||||
new_row['activeTimeRanges.minutes'] = activeTimeRanges[i]['activeTime']/60000
|
new_row['activeTimeRanges.minutes'] = activeTimeRanges[i]['activeTime']//60000
|
||||||
if i < lenRU:
|
if i < lenRU:
|
||||||
new_row['recentUsers.email'] = recentUsers[i].get('email', ['Unknown', 'UnmanagedUser'][recentUsers[i]['type'] == 'USER_TYPE_UNMANAGED'])
|
new_row['recentUsers.email'] = recentUsers[i].get('email', ['Unknown', 'UnmanagedUser'][recentUsers[i]['type'] == 'USER_TYPE_UNMANAGED'])
|
||||||
new_row['recentUsers.type'] = recentUsers[i]['type']
|
new_row['recentUsers.type'] = recentUsers[i]['type']
|
||||||
|
|||||||
Reference in New Issue
Block a user