Ann*_*nna 5 python google-app-engine python-2.7 google-drive-api google-api-python-client
我有一个应用程序需要登录到单个Drive帐户并使用cron作业自动对文件执行操作.最初,我尝试使用域管理员登录来执行此操作,但是我无法对域管理员进行任何测试,因为您似乎无法将测试服务器与域管理员帐户一起使用,这使得测试我的应用程序有点不可能!
因此,我开始考虑存储arbitray oauth令牌 - 尤其是刷新令牌 - 在初始设置后自动登录此帐户.但是,所有API和文档都假定多个用户手动登录,并且我无法在oauth API中找到允许或记录除当前登录用户之外的任何内容的功能.
如何以可以在测试域上测试代码的方式实现此目的?我可以不用编写自己的oauth库并手动执行oauth请求吗?或者有没有办法让域管理员授权在本地测试服务器上工作?
您可以使用远程API将单个帐户的凭据加载到数据存储中,该API可以在您的app.yaml文件中启用:
builtins:
- remote_api: on
Run Code Online (Sandbox Code Playgroud)
通过执行
remote_api_shell.py -s your_app_id.appspot.com
Run Code Online (Sandbox Code Playgroud)
从命令行,您可以访问可以在应用程序环境中执行的shell.在执行此操作之前,请确保已部署应用程序(更多内容在下面的本地开发中),并确保google-api-python-client通过pip安装和运行源enable-app-engine-project /path/to/project来将其添加到App Engine项目中.
进入远程shell后(执行上面的远程命令后),执行以下操作:
from oauth2client.appengine import CredentialsModel
from oauth2client.appengine import StorageByKeyName
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run
KEY_NAME = 'your_choice_here'
CREDENTIALS_PROPERTY_NAME = 'credentials'
SCOPE = 'https://www.googleapis.com/auth/drive'
storage = StorageByKeyName(CredentialsModel, KEY_NAME, CREDENTIALS_PROPERTY_NAME)
flow = OAuth2WebServerFlow(
client_id=YOUR_CLIENT_ID,
client_secret=YOUR_CLIENT_SECRET,
scope=SCOPE)
run(flow, storage)
Run Code Online (Sandbox Code Playgroud)
注意:如果您尚未使用google-api-python-client代码部署应用程序,则会失败,因为您的应用程序将不知道如何在本地计算机上进行相同的导入,例如from oauth2client.appengine import CredentialsModel.
当run被调用时,Web浏览器将打开,并提示您接受客户端的OAuth访问你与指定CLIENT_ID及CLIENT_SECRET后成功完成,这将节省的实例CredentialsModel中部署的应用程序的数据存储your_app_id.appspot.com,它会使用它存储在KEY_NAME您提供的.
执行此操作后,应用程序中的任何调用方(包括您的cron作业)都可以通过执行来访问这些凭据
storage = StorageByKeyName(CredentialsModel, KEY_NAME, CREDENTIALS_PROPERTY_NAME)
credentials = storage.get()
Run Code Online (Sandbox Code Playgroud)
地方发展:
如果您想在本地测试,可以通过dev_appserver.py在本地运行应用程序--port = PORT/path/to/project
您可以使用远程API shell执行相同的命令并将其指向本地应用程序:
remote_api_shell.py -s localhost:PORT
Run Code Online (Sandbox Code Playgroud)
在这里,您可以执行在远程api shell中执行的相同代码,类似地,实例CredentialsModel将存储在本地开发服务器的数据存储中.
如上所述,如果您没有包含正确的google-api-python-client模块,则会失败.
编辑:以前建议使用交互式控制台:
http://localhost:PORT/_ah/admin/interactive
Run Code Online (Sandbox Code Playgroud)
但是发现这不起作用,因为socket在App Engine本地开发沙箱中无法正常工作.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |