1

프로필 API에서 디렉터리 API로 스크립트를 마이그레이션하려고합니다. 이 기능의 목적은 includeInGlobalAddressList 속성을 사용하여 특정 Google Apps 도메인 사용자의 연락처 정보를 관리하는 것입니다.디렉터리 API를 사용하여 includeInGlobalAddressList를 변경할 수 없습니다.

사용자 개체를 가져올 수 있으며 패치 요청을 제출할 수 있지만 변경되지 않습니다. 패치 메소드에서 반환 된 객체는 includeInGlobalAddressList의 원래 값을가집니다. api 문서에서 etags에 대한 모호한 언급이 있지만, 패치 본문이나 If-Match 헤더에 etag가 포함되어 있어야하는지는 분명하지 않습니다. (? 그 대답은 IF-Match 헤더 인 경우, 다음 어떻게 파이썬 라이브러리를 사용하여 그 통과 하죠)

http = httplib2.Http() 
http = credentials.authorize(http) 

service = build("admin", "directory_v1", http=http) 
usersvc=service.users() 
d=usersvc.get(userKey=userkey, projection="basic",fields="etag,id,includeInGlobalAddressList").execute() 
visible = d['includeInGlobalAddressList'] 
# logic to decide what change elided. this is "transition from visible to invisible contact" 
pch=json.dumps({'includeInGlobalAddressList': False, 'etag': d['etag']}) 
print pch 
res=usersvc.patch(userKey=userkey, body=pch, fields="etag,id,includeInGlobalAddressList").execute() 
print json.dumps(res, indent=4) 

내가 얻을 결과는 다음과 같습니다

{"includeInGlobalAddressList": false, "etag": "\"WIg4sZOp0a-9Z5MJXVMQx1SQW5A/avXX6NaPX78Y6qFG7S4TqKFMIEU\""} 
{ 
    "includeInGlobalAddressList": true, 
    "etag": "\"WIg4sZOp0a-9Z5MJXVMQx1SQW5A/J0MuBtIvJoTcifknCMScMlyCQnc\"", 
    "id": "109793672165131484748" 
} 

이 발생 심지어 내가 fields을 사용하지 않거나 etag를 전달하더라도.

+0

patch() 메소드에 전달하기 전에 패치 본문을 문자열로 변환해야한다고 생각하지 않습니다. –

답변

0

패치 요청 전에 GET 할 필요가 없습니다. 패치의 아이디어는 변경된 데이터 만이 전선을 통해 전송된다는 것입니다. 시도해보십시오 :

service = build("admin", "directory_v1", http=http) 
usersvc = service.users() 
res = usersvc.patch(userKey=userkey, body={"includeInGlobalAddressList": False}, fields="id,includeInGlobalAddressList").execute() 
print res 
+0

다른 방법으로 작업하면 왕복을 줄일 수 있지만, PATCH 메서드가이 특성에 아무런 영향을 미치지 않는 것처럼 보이지는 않습니다. (그리고 그 해결책의 일부가 etag를 포함한다면, 나는 etag을 읽기 위해 GET이 필요하다) – chas35

+0

샘플 코드가 문제가되는 잘못된 json.dumps()를 제거했다. 그러나 위의 에릭의 의견이 아니라면 나는 그것을 알아 채지 못했을 것이다. – chas35