Add revision argument to gam get drivefile; add command gam show filerevisions

This commit is contained in:
Ross Scroggs
2016-04-28 14:38:19 -07:00
parent 52f4c049e1
commit ef7fcb2114

View File

@ -3876,24 +3876,28 @@ def createDriveFile(users):
def downloadDriveFile(users):
i = 5
query = fileIds = None
query = fileIds = revision = None
gdownload_format = u'openoffice'
target_folder = GC_Values[GC_DRIVE_DIR]
safe_filename_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
while i < len(sys.argv):
if sys.argv[i].lower() == u'id':
myarg = sys.argv[i].lower().replace('_', '')
if myarg == u'id':
fileIds = [sys.argv[i+1],]
i += 2
elif sys.argv[i].lower() == 'query':
elif myarg == u'query':
query = sys.argv[i+1]
i += 2
elif sys.argv[i].lower() == u'format':
elif myarg == u'revision':
revision = sys.argv[i+1]
i += 2
elif myarg == u'format':
gdownload_format = sys.argv[i+1].lower()
if gdownload_format not in [u'openoffice', u'ms', u'microsoft', u'micro$oft', u'pdf']:
print 'ERROR: format must be one of openoffice, microsoft or pdf. Got %s' % gdownload_format
print u'ERROR: format must be one of openoffice, microsoft or pdf. Got %s' % gdownload_format
sys.exit(2)
i += 2
elif sys.argv[i].lower().replace('_', '') == u'targetfolder':
elif myarg == u'targetfolder':
target_folder = sys.argv[i+1]
if not os.path.isdir(target_folder):
os.makedirs(target_folder)
@ -3901,7 +3905,7 @@ def downloadDriveFile(users):
else:
print u'ERROR: %s is not a valid argument for "gam <users> get drivefile"' % sys.argv[i]
sys.exit(2)
export_extensions = {u'application/pdf': '.pdf',
export_extensions = {u'application/pdf': u'.pdf',
u'application/vnd.openxmlformats-officedocument.wordprocessingml.document': u'.docx',
u'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': u'.xlsx',
u'application/vnd.openxmlformats-officedocument.presentationml.presentation': u'.pptx',
@ -3927,10 +3931,10 @@ def downloadDriveFile(users):
if query:
fileIds = doDriveSearch(drive, query=query)
else:
if fileIds[0][:8].lower() == 'https://' or fileIds[0][:7].lower() == 'http://':
fileIds[0] = fileIds[0][fileIds[0].find('/d/')+3:]
if fileIds[0].find('/') != -1:
fileIds[0] = fileIds[0][:fileIds[0].find('/')]
if fileIds[0][:8].lower() == u'https://' or fileIds[0][:7].lower() == u'http://':
fileIds[0] = fileIds[0][fileIds[0].find(u'/d/')+3:]
if fileIds[0].find(u'/') != -1:
fileIds[0] = fileIds[0][:fileIds[0].find(u'/')]
if not fileIds:
print u'No files to download for %s' % user
i = 0
@ -3965,13 +3969,13 @@ def downloadDriveFile(users):
pass
break
else:
print convertUTF8(u'Skipping download of file {0}, Format {1} not available'.format(result[u'title'], ','.join(export_formats)))
print convertUTF8(u'Skipping download of file {0}, Format {1} not available'.format(result[u'title'], u','.join(export_formats)))
continue
else:
print convertUTF8(u'Skipping download of file {0}, Format not downloadable')
continue
file_title = result[u'title']
safe_file_title = ''.join(c for c in file_title if c in safe_filename_chars)
safe_file_title = u''.join(c for c in file_title if c in safe_filename_chars)
filename = os.path.join(target_folder, safe_file_title)
if extension and filename.lower()[:len(extension)] != extension:
filename = u'%s%s' % (filename, extension)
@ -3986,38 +3990,50 @@ def downloadDriveFile(users):
break
filename = new_filename
print convertUTF8(my_line % filename)
if revision:
download_url = u'{0}&revision={1}'.format(download_url, revision)
_, content = drive._http.request(download_url)
writeFile(filename, content, continueOnError=True)
def printDriveFileData(feed):
for setting in feed:
if setting in [u'kind', u'etag']:
continue
setting_type = str(type(feed[setting]))
if setting_type == u"<type 'list'>":
print u'%s:' % setting
for settin in feed[setting]:
if settin in [u'kind', u'etag']:
continue
settin_type = str(type(settin))
if settin_type == u"<type 'dict'>":
for setti in settin:
if setti in [u'kind', u'etag']:
continue
print convertUTF8(u' %s: %s' % (setti, settin[setti]))
print u''
elif setting_type == u"<type 'dict'>":
print u'%s:' % setting
for settin in feed[setting]:
if settin in [u'kind', u'etag']:
continue
print convertUTF8(u' %s: %s' % (settin, feed[setting][settin]))
else:
print convertUTF8(u'%s: %s' % (setting, feed[setting]))
def showDriveFileInfo(users):
for user in users:
fileId = sys.argv[5]
drive = buildGAPIServiceObject(u'drive', user)
feed = callGAPI(service=drive.files(), function=u'get', fileId=fileId)
for setting in feed:
if setting == u'kind':
continue
setting_type = str(type(feed[setting]))
if setting_type == u"<type 'list'>":
print u'%s:' % setting
for settin in feed[setting]:
if settin == u'kind':
continue
settin_type = str(type(settin))
if settin_type == u"<type 'dict'>":
for setti in settin:
if setti == u'kind':
continue
print convertUTF8(u' %s: %s' % (setti, settin[setti]))
print u''
elif setting_type == u"<type 'dict'>":
print u'%s:' % setting
for settin in feed[setting]:
if settin == u'kind':
continue
print convertUTF8(u' %s: %s' % (settin, feed[setting][settin]))
else:
print convertUTF8(u'%s: %s' % (setting, feed[setting]))
printDriveFileData(feed)
def showDriveFileRevisions(users):
for user in users:
fileId = sys.argv[5]
drive = buildGAPIServiceObject(u'drive', user)
feed = callGAPI(service=drive.revisions(), function=u'list', fileId=fileId)
printDriveFileData(feed)
def transferSecCals(users):
target_user = sys.argv[5]
@ -9527,6 +9543,8 @@ try:
showDriveFileTree(users)
elif readWhat == u'fileinfo':
showDriveFileInfo(users)
elif readWhat == u'filerevisions':
showDriveFileRevisions(users)
elif readWhat == u'sendas':
showSendAs(users)
elif readWhat == u'gmailprofile':