GCE Python API: oauth2client.util:execute() принимает не более 1 позиционного аргумента (даны 2)

Я пытаюсь начать работу с Python API для Google Compute Engine, используя их учебник «hello world» на https://developers.google.com/compute/docs/api/python_guide#setup

Однако всякий раз, когда я делаю вызов 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 для ответов, но ничего не кажется неправильным. Я нашел другую запись о переполнении стека, в которой возникла та же проблема, но она кажется, что в конструкторе класса OAuth2WebServerFlow в oauth2client/client.py для «access_type» уже установлено значение «автономно» (хотя, честно говоря, я не совсем понимаю, что здесь происходит с точки зрения настройки потоков oauth2.0 ).

Любые предложения будут высоко оценены, и спасибо заранее!


person sova    schedule 14.04.2013    source источник


Ответы (3)


Глядя на код, аннотация @util.positional(1) выдает предупреждение. Избегайте этого, используя именованные параметры.

Вместо:

response = request.execute(auth_http)

Do:

response = request.execute(http=auth_http)

https://code.google.com/p/google-api-python-client/source/browse/apiclient/http.py#637

person Felipe Hoffa    schedule 20.05.2013

Я думаю, что документация неверна. Пожалуйста, используйте следующее:

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()
person Burcu Dogan    schedule 17.04.2013

Здесь вы можете сделать одну из трех вещей:

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)
person Craig    schedule 23.09.2013