More v3 work

This commit is contained in:
Jay Lee
2017-03-18 20:36:45 -04:00
parent f8d43a19c1
commit 92521acfa3

View File

@ -3432,11 +3432,11 @@ def printDriveSettings(users):
count = len(users) count = len(users)
for user in users: for user in users:
i += 1 i += 1
user, drive = buildDriveGAPIObject(user) user, drive = buildDrive3GAPIObject(user)
if not drive: if not drive:
continue continue
sys.stderr.write(u'Getting Drive settings for %s (%s/%s)\n' % (user, i, count)) sys.stderr.write(u'Getting Drive settings for %s (%s/%s)\n' % (user, i, count))
feed = callGAPI(drive.about(), u'get', soft_errors=True) feed = callGAPI(drive.about(), u'get', fields=u'*', soft_errors=True)
if feed is None: if feed is None:
continue continue
row = {u'email': user} row = {u'email': user}
@ -3521,70 +3521,85 @@ def showDriveFileACL(users):
def getPermissionId(argstr): def getPermissionId(argstr):
permissionId = argstr.strip().lower() permissionId = argstr.strip().lower()
if permissionId[:3] == u'id:': if permissionId[:3] == u'id:':
return (False, argstr.strip()[3:]) return argstr.strip()[3:]
if permissionId == u'anyone': if permissionId == u'anyone':
return (False, permissionId) return u'anyone'
if permissionId == u'anyonewithlink': if permissionId == u'anyonewithlink':
return (False, u'anyoneWithLink') return u'anyoneWithLink'
if permissionId.find(u'@') == -1: if permissionId.find(u'@') == -1:
permissionId = u'%s@%s' % (permissionId, GC_Values[GC_DOMAIN]) permissionId = u'%s@%s' % (permissionId, GC_Values[GC_DOMAIN])
return (True, permissionId) admin_email = _getAdminUserFromOAuth()
# We have to use v2 here since v3 has no permissions.getIdForEmail equivalent
# https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4313
_, drive2 = buildDriveGAPIObject(admin_email)
return callGAPI(drive2.permissions(), u'getIdForEmail', email=permissionId, fields=u'id')[u'id']
def delDriveFileACL(users): def delDriveFileACL(users):
fileId = sys.argv[5] fileId = sys.argv[5]
isEmail, permissionId = getPermissionId(sys.argv[6]) permissionId = getPermissionId(sys.argv[6])
for user in users: for user in users:
user, drive = buildDriveGAPIObject(user) user, drive = buildDrive3GAPIObject(user)
if not drive: if not drive:
continue continue
if isEmail:
permissionId = callGAPI(drive.permissions(), u'getIdForEmail', email=permissionId, fields=u'id')[u'id']
isEmail = False
print u'Removing permission for %s from %s' % (permissionId, fileId) print u'Removing permission for %s from %s' % (permissionId, fileId)
callGAPI(drive.permissions(), u'delete', fileId=fileId, permissionId=permissionId, supportsTeamDrives=True) callGAPI(drive.permissions(), u'delete', fileId=fileId, permissionId=permissionId, supportsTeamDrives=True)
def addDriveFileACL(users): def addDriveFileACL(users):
fileId = sys.argv[5] fileId = sys.argv[5]
body = {u'type': sys.argv[6].lower()} body = {u'type': sys.argv[6].lower()}
sendNotificationEmails = False sendNotificationEmail = False
emailMessage = None emailMessage = None
if body[u'type'] not in [u'user', u'group', u'domain', u'anyone']: transferOwnership = None
print u'ERROR: permission type must be user, group domain or anyone; got %s' % body[u'type']
if body[u'type'] == u'anyone': if body[u'type'] == u'anyone':
i = 7 i = 7
else: elif body[u'type'] in [u'user', u'group']:
body[u'value'] = sys.argv[7] body[u'emailAddress'] = sys.argv[7]
i = 8 i = 8
elif body[u'type'] == u'domain':
body[u'domain'] = sys.argv[7]
i = 8
else:
print u'ERROR: permission type must be user, group domain or anyone; got %s' % body[u'type']
sys.exit(5)
while i < len(sys.argv): while i < len(sys.argv):
if sys.argv[i].lower().replace(u'_', u'') == u'withlink': if sys.argv[i].lower().replace(u'_', u'') == u'withlink':
body[u'withLink'] = True body[u'allowFileDiscovery'] = False
i += 1
elif sys.argv[i].lower() == u'discoverable':
body[u'allowFileDiscovery'] = True
i += 1 i += 1
elif sys.argv[i].lower() == u'role': elif sys.argv[i].lower() == u'role':
body[u'role'] = sys.argv[i+1] body[u'role'] = sys.argv[i+1]
if body[u'role'] not in [u'reader', u'commenter', u'writer', u'owner', u'organizer', u'editor']: if body[u'role'] not in [u'reader', u'commenter', u'writer', u'owner', u'organizer', u'editor']:
print u'ERROR: role must be reader, commenter, writer, organizer, or owner; got %s' % body[u'role'] print u'ERROR: role must be reader, commenter, writer, organizer, or owner; got %s' % body[u'role']
sys.exit(2) sys.exit(2)
if body[u'role'] == u'commenter': if body[u'role'] == u'editor':
body[u'role'] = u'reader'
body[u'additionalRoles'] = [u'commenter']
elif body[u'role'] == u'editor':
body[u'role'] = u'writer' body[u'role'] = u'writer'
elif body[u'role'] == u'owner':
sendNotificationEmail = True
transferOwnership = True
i += 2 i += 2
elif sys.argv[i].lower().replace(u'_', u'') == u'sendemail': elif sys.argv[i].lower().replace(u'_', u'') == u'sendemail':
sendNotificationEmails = True sendNotificationEmail = True
i += 1 i += 1
elif sys.argv[i].lower().replace(u'_', u'') == u'emailmessage': elif sys.argv[i].lower().replace(u'_', u'') == u'emailmessage':
sendNotificationEmails = True sendNotificationEmail = True
emailMessage = sys.argv[i+1] emailMessage = sys.argv[i+1]
i += 2 i += 2
elif sys.argv[i].lower() == u'expires':
body[u'expirationTime'] = sys.argv[i+1]
i += 2
else: else:
print u'ERROR: %s is not a valid argument for "gam <users> add drivefileacl"' % sys.argv[i] print u'ERROR: %s is not a valid argument for "gam <users> add drivefileacl"' % sys.argv[i]
sys.exit(2) sys.exit(2)
for user in users: for user in users:
user, drive = buildDriveGAPIObject(user) user, drive = buildDrive3GAPIObject(user)
if not drive: if not drive:
continue continue
result = callGAPI(drive.permissions(), u'insert', fileId=fileId, sendNotificationEmails=sendNotificationEmails, emailMessage=emailMessage, body=body, supportsTeamDrives=True) result = callGAPI(drive.permissions(), u'create', fields=u'*',
fileId=fileId, sendNotificationEmail=sendNotificationEmail,
emailMessage=emailMessage, body=body, supportsTeamDrives=True,
transferOwnership=transferOwnership)
printPermission(result) printPermission(result)
def updateDriveFileACL(users): def updateDriveFileACL(users):