【问题标题】:automatically import modules for App Engine interactive console为 App Engine 交互式控制台自动导入模块
【发布时间】:2010-11-06 14:33:01
【问题描述】:

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

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

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

我会调查并希望找到答案,如果您对如何完成此操作有任何想法,请告诉我。

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    好问题!交互式控制台的相关代码位于 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 上而不是在您自己的模块下的“模板”子目录中查找模板。

    【讨论】:

    • 看起来这不适用于每个应用程序。理想情况下,我正在寻找一种方法,将代码保持在单个应用程序的范围内。
    • “基于每个应用程序”是什么意思?我在上面概述的内容仅包括为您的应用编写一些额外的代码 - 它不涉及修改 SDK。
    • 抱歉,我误解了这种方法的要点。当我得到这个工作时,我会发布更新......
    【解决方案2】:

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

    【讨论】:

    • 嗨,今天的果酱。我刚刚从 Google 快讯中发现了这个问题。我是 App Engine Console 的作者。我正在考虑在假期进行重大升级,所以如果您有任何我应该知道的错误或功能,请告诉我!
    【解决方案3】:

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

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

    这将适用于您的所有应用程序,正如您所提到的,每次 SDK 更新时您都必须这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 2011-10-14
      • 2010-12-19
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多