run_flow()的哪个标志将模拟现在已弃用的run()

时间:2014-08-21 09:16:37

标签: oauth-2.0 google-oauth google-api-python-client gmail-api oauth2client

我正在尝试验证我的凭据以访问GMail API。以前我使用OAuth2中的run()方法和代码credentials = tools.run(flow, STORAGE, http=http)执行此操作,但现在这是一个不推荐使用的方法。我现在使用run_flow()方法来验证我的凭据。

import httplib2
import argparse
from apiclient import errors
from apiclient.discovery import build
from oauth2client import tools
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets

CLIENT_SECRET_FILE = 'your_client_secret.json'
OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.modify'
STORAGE = Storage('gmail.storage')
flow = flow_from_clientsecrets(CLIENT_SECRET_FILE, scope=OAUTH_SCOPE)
http = httplib2.Http()
credentials = STORAGE.get()there are credentials, no reauth is needed
#parser = argparse.ArgumentParser(parents=[tools.argparser])
#flags = parser.parse_args()    #Put your arguments in the parenthesis
if credentials is None or credentials.access_token_expired:
    credentials = run(flow, STORAGE, http=http)
    #credentials = tools.run_flow(flow, STORAGE, flags, http=http)
http = credentials.authorize(http)
gmail_service = build('gmail', 'v1', http=http)

评论行是使用run_flow()而不是run()的代码。

注释掉的代码给出了错误:run.py: error: unrecognized arguments: AdminTests,AdminTests不是我给Python的参数。

当我更改解析为flags = parser.parse_args(['--noauth_local_webserver'])的参数时,我没有错误,但没有任何反应。

我应该使用哪个flag来尽可能地模拟run(),我应该如何解析它?

修改:使用run()方法验证我的凭据时,访问的网址是: http://localhost:8080/?code=4/myuniqueID(在示例中缺少我的唯一ID)

2 个答案:

答案 0 :(得分:6)

你需要做的就是将一个空的args列表传递给argparser,就像这样

flags = tools.argparser.parse_args(args=[])
credentials = tools.run_flow(flow, storage, flags)

答案 1 :(得分:-1)

将您的代码与OAuth的runrun_flow的源代码进行比较后,发现您是否包含http参数之间存在显着差异。

所以,

tools.run(flow, STORAGE, http=http)

可以使用

进行模拟
tools.run_flow(flow, STORAGE, flags, http=http)

但你有,

tools.run_flow(flow, STORAGE, flags)