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

Posted

技术标签:

【中文标题】run_flow() 的哪个标志将模拟现在已弃用的 run()【英文标题】:Which flag for run_flow() will simulate the now deprecated run() 【发布时间】:2014-10-14 20:43:07 【问题描述】:

我正在尝试验证我的凭据以访问 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() 方法验证我的凭据时,访问的 URL 是: http://localhost:8080/?code=4/myuniqueID(示例中缺少我的唯一 ID)

【问题讨论】:

更多细节可以在这里找到...***.com/questions/24890146/… 【参考方案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)

【讨论】:

您甚至没有正确阅读该问题。标志是在命令行中采用的参数(并给出here 以指示您用于凭据的存储和您使用的方法希望用来访问/验证它们。【参考方案2】:

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

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

【讨论】:

这似乎已过时(至少对于 Python3 而言):tools.run_flow() 包含此代码:if flags is None:flags = argparser.parse_args() 所以无需手动执行此操作。 正如大多数技术一样,它会不断发展,事情也会变得过时。我没有回头看代码,但这个答案是 3.5 年前的,而且绝对是在 python 2.7 中:) 我需要更新我的评论:默认情况下,内置代码将使用全局 argv,因此仅当全局 argv 为空或仅包含内置参数时才有效解析器识别。如果您有自己的参数,则内置解析器可能会失败。因此,您的回答仍然有效且必要。

以上是关于run_flow() 的哪个标志将模拟现在已弃用的 run()的主要内容,如果未能解决你的问题,请参考以下文章

已弃用的 AudioManger.setStreamMute 的替代方案?

将 pybind11 绑定标记为已弃用的最佳方法

寻找现在已弃用的 retryWhen 的替代方案

在iOS 7中替换已弃用的sizeWithFont:

使用或覆盖已弃用的 API 颤振

如何在 Jest 单元测试中模拟在 `created` Vue 生命周期挂钩中调用的方法,而不使用`shallowMount` 中已弃用的`methods` 参数? [复制]