自动导入App Engine交互式控制台的模块

时间:2009-06-29 06:05:11

标签: google-app-engine

可在localhost:8080 / _ah / admin访问的交互式控制台对于调试App Engine应用程序非常有用。

我总是发现自己一遍又一遍地导入相同的模块,特别是模型。

我看了猴子修补交互式控制台以自动导入这些模型,我很难过。理想情况下,我可以从我的应用程序执行此操作,因此每次更新SDK时都不需要重新应用修补程序。

我会调查并希望找到答案,如果您对如何实现这一点有任何想法,请告诉我。

3 个答案:

答案 0 :(得分:3)

好问题!交互式控制台的相关代码位于google/appengine/ext/admin/init.py:188的InteractiveExecuteHandler中。具体来说,它执行如下代码:

  try:
    compiled_code = compile(code, '<string>', 'exec')
    exec(compiled_code, globals())
  except Exception, e:
    traceback.print_exc(file=results_io)

请注意,对于全局变量,它只使用它所在模块的全局变量。因此,为了提供您自己的导入,您需要做的就是:

  1. 创建您自己的模块,您可以在其中导入和子类化InteractivePageHandler和InteractiveExecuteHandler
  2. 在新模块中导入您想要的任何其他模块和类 - 它们将自动导入任何由它们执行的代码。
  3. 覆盖这些类中BaseRequestHandler的generate()函数,以便他们在google / appengine / ext / admin / templates上查找模板,而不是在您自己的模块下的“templates”子目录中。

答案 1 :(得分:3)

我最终使用的是带有autoexec.py的App Engine Console项目,该项目提供了我所询问的功能。

答案 2 :(得分:1)

我不确定这是否适合您的目的,但您只需编辑交互式控制台页面的html模板即可输入不同的默认文本。它位于:

./google_appengine/google/appengine/ext/admin/templates/interactive.html

这适用于您的所有应用,正如您所提到的,每次SDK更新时您都必须使用它。