2013-10-24 2 views
0

Cloud Enpoint를 내 앱에 통합하려고하는데 현재 개념 입증을 위해 Python 빠른 시작을 사용하고 있습니다. 내 유리에 카드를 보내는 방법을 호출하려고 할 때 문제가 있습니다. 아래 내 코드입니다 들여 쓰기가 누락되었습니다 무시하십시오. "themirror._insert_map_with_distance_from_home()가"나는 다음과 같은 오류를 얻고있다라고 그래서 Cloud Endpoints - Google Glass 객체에 'mirror_service'속성이 없습니다.

@endpoints.api(name='tasks', version='v1', 
description='API for TaskAlert Management', 
allowed_client_ids=[CLIENT_ID, endpoints.API_EXPLORER_CLIENT_ID]) 
class TaskAlertApi(remote.Service): 
@endpoints.method(Task, Task, 
name='task.insert', 
path='tasker', 
http_method='POST') 
def insert_task(self, request): 

TaskModel(author=request.author, content=request.content, date=request.date).put() 
themirror = MainHandler() 

themirror._insert_map_with_distance_from_home() 

return request 

. 누구든지 어떤 제안이 있습니까? 나는 이것을 myappspot.com/_ah/api/explorer에서 호출하려고합니다.

in _insert_map_with_distance_from_home 
    self.mirror_service.timeline().insert(body=body).execute() 
AttributeError: 'MainHandler' object has no attribute 'mirror_service' 

답변

2

난 당신이 꽤 이것에 대한 코드를 다시 생각해야 할 것 같군요하지만 기본은 여기에서 설명 얻을하려고합니다.

MainHandler는 실제로 HTTP 요청을 수신 할 때 MainHandler가 상당히 약간의 문제가 있습니다. 가장 중요한 것은 MainHandler의 get 메서드의 @util.auth_required 데코레이터에서 발생하며 실제로는 mirror_service을 생성하고 현재 사용자에 대해 인증됩니다. 코드에서 직접 MainHandler에 액세스하면 실제로 아무 것도 발생하지 않으므로 mirror_service을 사용할 수 없습니다 (이로 인해 오류가 발생합니다).

엔드 포인트가 호출되는 방식이 일반 RequestHandlers가 호출되는 방식과 완전히 다르므로 저장된 세션 자격 증명 또는 유사하게 엔드 포인트 사용자를 미러 사용자와 일치시킬 수 없습니다.

기본적으로 엔드 포인트 메소드 내에 새로운 mirror_service을 생성해야합니다.

이 경우 API를 인증 (미러 범위 API를 인증 범위에 추가)해야합니다. 그런 다음 요청 헤더에서 used access_token을 추출하고이 access_token을 사용하여 OAuth2Credentials를 작성하여 mirror_service를 작성할 수 있습니다. 그런 다음이 mirror_service 객체를 사용하도록 _insert_map_with_distance_from_home을 변경해야 물론

import os 
from oauth2client.client import AccessTokenCredentials 

# extract the token from request 
if "HTTP_AUTHORIZATION" in os.environ: 
    (tokentype, token) = os.environ["HTTP_AUTHORIZATION"].split(" ") 

# create simple OAuth2Credentials using the token 
credentials = AccessTokenCredentials(token, 'my-user-agent/1.0') 

# create mirror_service (using the method from util.py from the quickstart(
mirror_service = create_service('mirror', 'v1', credentials) 

하지만,이 방법을 이동 :

실제 코드를 모른 채 그것을 말할 어렵다 이후 완전성의 약속이없는 일부 코드 조각

어쨌든 MainHandler에서 멀리 떨어져있는 것이이 컨텍스트에서 더 이해할 수 있습니다.

+0

감사합니다. 나는 그것을 통해 일하고 또한 http://stackoverflow.com/questions/18213622/using-additional-google-apis-in-my-glassware-sharing-to-g-accounts에서 의견을 통합하고있다 여기에 오류가있다 ' 지금 받고있는 m. ProtoRPC 메소드 구현에서 예기치 않은 오류가 발생했습니다. HttpError (을 반환했습니다) – marty331

+1

API 요청을 인증 받았을 때 (여전히 API 탐색기로 테스트 중이라고 가정 할 때) 추가 범위로'https : // www.googleapis.com/auth/glass.timeline'을 추가 했습니까? 그렇지 않으면 액세스 토큰을 사용하여 타임 라인에 쓸 수있는 권한이 없기 때문입니다. – Scarygami

+0

Scarygami, 정확히 내가 놓친 것이었다! 이제 종점을 연결하고 타임 라인 카드를 Glass에 보낼 수 있습니다! 나는 네 도움에 충분히 감사 할 수 없다! – marty331

관련 문제