0

我正在尝试将云点合并到我的应用程序中,我目前正在使用 Python 快速入门进行概念验证。当我尝试调用一种方法将卡片发送到我的玻璃杯时,我遇到了问题。以下是我的代码,请忽略缺少的缩进。

@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

因此,当调用“themirror._insert_map_with_distance_from_home()”时,我收到以下错误。有没有人有什么建议?我试图从 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'
4

1 回答 1

2

恐怕您将不得不为此重新考虑您的代码,但我会尝试在这里解释基础知识。

主要问题是 MainHandler 在实际接收 HTTP 请求时做了很多工作。最重要的是@util.auth_requiredMainHandlerget方法的装饰器中发生的事情,它实际上mirror_service为当前用户创建了经过身份验证的 ,。当您直接从代码中访问 MainHandler 时,实际上并没有发生任何事情,因此没有mirror_service可用的(这会导致您得到错误)。

由于调用端点的方式与调用普通 RequestHandler 的方式完全不同,因此您也不能依赖存储的会话凭据或类似的方式来将端点用户与镜像用户匹配。

基本上你要做的就是mirror_service在你的端点方法内部创建一个新的。

为此,您必须调用经过身份验证的 API(将 Mirror API 范围添加到身份验证范围)。然后,您可以access_token从请求标头中提取 used 并使用此 access_token 创建 OAuth2Credentials 以创建 mirror_service。

一些没有完整性承诺的代码片段,因为在不知道您的实际代码的情况下很难分辨:

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)

当然,您还必须更改_insert_map_with_distance_from_home以使用此 mirror_service 对象,但无论如何将这个方法从您的 MainHandler 中移开在这种情况下会更有意义。

于 2013-10-24T01:01:04.557 回答