我正在尝试使用https://developers.google.com/compute/docs/api/python_guide#setup上的“hello world”教程开始使用Google Compute Engine的Python API
无论何时拨打电话response = request.execute(auth_http)
,我都会收到以下错误信号,表明我无法进行身份验证:
WARNING:oauth2client.util:execute() takes at most 1 positional argument (2 given)
我显然只传递了一个位置参数(auth_http),我查看了oauth2client / util.py,apiclient / http.py和oauth2client / client.py以获得答案,但似乎没有任何问题。我发现another stack overflow post遇到了同样的问题,但似乎在oauth2client / client.py中的OAuth2WebServerFlow类的构造函数中,'access_type'已经设置为'offline'(虽然老实说我不知道)完全理解在设置oauth2.0流程方面发生了什么。
任何建议都会非常感谢,并提前感谢!
答案 0 :(得分:8)
查看代码,@ util.positional(1)注释会抛出警告。避免使用命名参数。
而不是:
response = request.execute(auth_http)
执行:
response = request.execute(http=auth_http)
https://code.google.com/p/google-api-python-client/source/browse/apiclient/http.py#637
答案 1 :(得分:5)
我认为文档是错误的。请使用以下内容:
auth_http = credentials.authorize(http)
# Build the service
gce_service = build('compute', API_VERSION, http=auth_http)
project_url = '%s%s' % (GCE_URL, PROJECT_ID)
# List instances
request = gce_service.instances().list(project=PROJECT_ID, filter=None, zone=DEFAULT_ZONE)
response = request.execute()
答案 2 :(得分:2)
你可以在这里做三件事之一:
1忽略警告并且什么都不做。
2取消警告并将标志设置为忽略:
import oauth2client
import gflags
gflags.FLAGS['positional_parameters_enforcement'].value = 'IGNORE'
3找出提供位置参数的位置并修复它:
import oauth2client
import gflags
gflags.FLAGS['positional_parameters_enforcement'].value = 'EXCEPTION'
# Implement a try and catch around your code:
try:
pass
except TypeError, e:
# Print the stack so you can fix the problem, see python exception traceback docs.
print str(e)