GCP Python - Google TeamDrive API - 权限
GCP Python - Google TeamDrive API - Permissions
在使用 Google Team Drive API 的权限部分时,非常感谢一些建议:
https://developers.google.com/drive/v3/reference/permissions
我目前正在编写一段代码,它将创建一个团队驱动器,通过 ID 创建一些文件(mimetype 文件夹)到团队驱动器,然后将用户作为一个组添加到团队驱动器。
代码使用 API 成功创建了团队驱动器和文件夹,但是,当我将用户添加到团队驱动器时,我的响应完全不同,例如:
def build_google_teamdrive(drive_name):
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
team_drive_metadata = {'name': drive_name, "colorRgb": "#004e37"}
request_id = str(uuid.uuid4())
response = service.teamdrives().create(body=team_drive_metadata, requestId=request_id).execute()
logger.info('Creating Team Drive for: {}'.format(drive_name))
print(response)
return response
这 returns 预期响应:
{u'kind': u'drive#teamDrive', u'id': u'0AFlsLbuvuChJUk9PVA', u'name': u'TeamDriveName'}
这确认代码具有 运行 预期,与 .files() 相同。
现在,当我尝试将成员(组)添加到团队云端硬盘时,我得到了完全不同的结果:
def test_insert():
viewer_group = 'some_user@test.domain.co.uk'
drive_unique_id = '0BKk5OjdX66ooUk9PVA'
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
resource = {
"role": "reader",
"type": "group",
"emailAddress": viewer_group
}
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False)
print(response)
return response
这个returns 回复:
<googleapiclient.http.HttpRequest object at 0x104e741d0>
使用权限插入时 API:我期望的响应是:
{"kind": "drive#permission","id": "00723864391275245674","type": "group","role": "reader"}
如果我能就此问题获得任何帮助,我将不胜感激,因为我真的很困惑它为何无法正常工作。
谢谢,
PyJordan
查看代码很清楚为什么响应没有按预期 return,请看这里:
response = service.teamdrives().create(body=team_drive_metadata, requestId=request_id).execute()
正如您在回复末尾看到的那样,您写道:
.execute()
解决方法很简单,在您的代码中写了:
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False)
我现在会为您解决这个问题:
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False).execute()
希望这对您有所帮助,祝您好运。
VS
在使用 Google Team Drive API 的权限部分时,非常感谢一些建议: https://developers.google.com/drive/v3/reference/permissions
我目前正在编写一段代码,它将创建一个团队驱动器,通过 ID 创建一些文件(mimetype 文件夹)到团队驱动器,然后将用户作为一个组添加到团队驱动器。
代码使用 API 成功创建了团队驱动器和文件夹,但是,当我将用户添加到团队驱动器时,我的响应完全不同,例如:
def build_google_teamdrive(drive_name):
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
team_drive_metadata = {'name': drive_name, "colorRgb": "#004e37"}
request_id = str(uuid.uuid4())
response = service.teamdrives().create(body=team_drive_metadata, requestId=request_id).execute()
logger.info('Creating Team Drive for: {}'.format(drive_name))
print(response)
return response
这 returns 预期响应:
{u'kind': u'drive#teamDrive', u'id': u'0AFlsLbuvuChJUk9PVA', u'name': u'TeamDriveName'}
这确认代码具有 运行 预期,与 .files() 相同。
现在,当我尝试将成员(组)添加到团队云端硬盘时,我得到了完全不同的结果:
def test_insert():
viewer_group = 'some_user@test.domain.co.uk'
drive_unique_id = '0BKk5OjdX66ooUk9PVA'
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('drive', 'v3', http=http)
resource = {
"role": "reader",
"type": "group",
"emailAddress": viewer_group
}
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False)
print(response)
return response
这个returns 回复:
<googleapiclient.http.HttpRequest object at 0x104e741d0>
使用权限插入时 API:我期望的响应是:
{"kind": "drive#permission","id": "00723864391275245674","type": "group","role": "reader"}
如果我能就此问题获得任何帮助,我将不胜感激,因为我真的很困惑它为何无法正常工作。
谢谢, PyJordan
查看代码很清楚为什么响应没有按预期 return,请看这里:
response = service.teamdrives().create(body=team_drive_metadata, requestId=request_id).execute()
正如您在回复末尾看到的那样,您写道:
.execute()
解决方法很简单,在您的代码中写了:
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False)
我现在会为您解决这个问题:
response = service.permissions().create(fileId=drive_unique_id, body=resource, supportsTeamDrives=True, sendNotificationEmail=False).execute()
希望这对您有所帮助,祝您好运。
VS