通过Python中的Google Directory API为用户修补/更新自定义字段

时间:2016-06-15 15:04:22

标签: python json google-admin-sdk google-directory-api

我无法通过Python中的Google Directory API为我的用户修补/更新自定义字段。我使用的是google-api-python-client / 1.5.1。

我能够通过我的脚本生成的json通过https://developers.google.com/admin-sdk/directory/v1/reference/users/patch修补/更新自定义字段。我也可以使用我的脚本生成的json使用curl进行修补。但是,当我尝试直接从我的脚本进行修补/更新时,不会进行任何更改。这很奇怪,因为我成功地使用相同的语法从同一个脚本修补其他字段(手机号码,固定电话等)。

...
OAUTH_SCOPE = 'https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.group'

credentials = SignedJwtAssertionCredentials(
'service-account-email',
key,
scope=OAUTH_SCOPE,
sub='admin@example.net')
httplib2.debuglevel = 1
http = httplib2.Http()
http = credentials.authorize(http)
directory_service = build('admin', 'directory_v1', http=http)    
params = {'customer': 'my_customer'}
...
Get user info from LDAP, returns mail, mobile and groups
...
patch = {'phones':
 [
  {'value': mobile, 'type': 'work_mobile', 'primary': 'true'}
 ]
}
try:
 patchr = directory_service.users().patch(userKey=mail, body=patch).execute(http=http)
except errors.HttpError as e:
 print e
customSchemas['aswSchema']['adGroups'] = []
for group in groups:
 customSchemas['aswSchema']['adGroups'].append({'value': group})
patchg = json.dumps(customSchemas)
try:
 patchr = directory_service.users().patch(userKey=mail, body=patchg).execute(http=http)
except errors.HttpError as e:
 print e    
....

patchg变量例如如下:

{"aswSchema":
 {"adGroups":
 [
  {"value": "r_app_app1-ro"},
 ]
 }
}

我在httplib2的调试日志中看到了这一点:

send: 'PATCH /admin/directory/v1/users/user%40example.net?alt=json HTTP/1.1\r\nHost: www.googleapis.com\r\ncontent-length: 69\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: google-api-python-client/1.5.1 (gzip)\r\ncontent-type: application/json\r\nauthorization: Bearer very-long-string\r\n\r\n"{\\"aswSchema\\": {\\"adGroups\\": [{\\"value\\": \\"r_net_app1-ro\\"}]}}"'
reply: 'HTTP/1.1 200 OK\r\n'

但是,用户未使用adGroups字段进行更新。

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

尝试仅发送customSchemas而不是patchg。

我碰到了类似的东西,我不应该把它转换成字符串。

在我更改customSchema的当前代码中,我目前只是在提交正文中发送补丁字典,这似乎工作正常。