Python 2 模組設定

appengine_config.py 檔案是設定檔,可讓您指定 程式庫的安裝資料夾,並為 google.appengine 套件中的部分 Python 模組提供常數和「hook 函式」的自訂值。指定自訂值可能會變更應用程式所需相關 App Engine 服務的預設行為。您可以與 app.yaml 設定檔一起定義這個檔案,並與應用程式的其他程式碼一起部署。

使用 appengine_config.py 設定 Python 模組

App Engine 中的多個 Python 模組可透過 appengine_config.py 加以設定。

如要自訂服務的 Python 模組,請在該服務的根目錄中建立新的 appengine_config.py 檔案。如要使用這個檔案,您必須定義要覆寫的常數或 hook 函式,接著,請從 app.yaml 檔案所在的目錄執行 gcloud app deploy,重新部署應用程式和新的 appengine_config.py 檔案。您定義的常數和掛鉤函式,就會由這些 App Engine 服務在內部使用。

如要覆寫常數,請在常數名稱前面加上 Python 模組名稱和底線,然後指派值。舉例來說,如要編輯 appstats 中的覆寫,您可以定義 KEY_PREFIX 的值:

appstats_KEY_PREFIX = '__my_custom_prefix__'

在其他 Python 模組中,覆寫的掛鉤函式命名方式也類似。舉例來說,在 namespace_manager 中,您可以將 appengine_config.py 中的 hook 函式 default_namespace_for_request 覆寫為:

import os
def namespace_manager_default_namespace_for_request():
    return os.environ.get('HTTP_HOST', '')

App Engine 中可設定的 Python 模組

下列 Python 模組可使用 appengine_config.py 進行設定。按照慣例,hook 函式為小寫,常數為大寫:

namespace_manager
  • default_namespace_for_request() (預設會傳回 None)

appstats

datastore_admin

  • BASE_PATH (預設為 '/_ah/datastore_admin')
  • MAPREDUCE_PATH (預設為 '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE (預設為 True)

remoteapi

透過 lib_config 設定自訂的 Python 模組

您也可以使用 appengine_config.py 中定義的常數和 hook 函式,透過 App Engine 設定自己的 Python 模組。 lib_config.register() 函式可讓您註冊使用者可覆寫的常數和鉤子的名稱,並在使用者不想覆寫時定義合理的預設值。在內部,lib_config.register() 會嘗試匯入 appengine_config。如果成功,系統會將指定 Python 模組的預設值,替換為 appengine_config.py 中定義的值。

my_module.py 中的使用範例:

from google.appengine.api import lib_config

def _hook_function1_default():
   return 'baz'

_config = lib_config.register('my_module', {'CONSTANT1': 'foo',
                                            'CONSTANT2': 'bar',
                                            'hook_function1': _hook_function1_default})

您現在可以將使用者的常數存取為:

_config.CONSTANT1
_config.CONSTANT2

並呼叫其 hook 函式為:

_config.hook_function1()

有些程式設計人員會將預設值集合為類別:

class _ConfigDefaults(object):
  CONSTANT1 = 'foo'
  CONSTANT2 = 'bar'
  def hook_function1():
      return 'baz'

_config = lib_config.register('my_module',  _ConfigDefaults.__dict__)

如要覆寫預設值,使用者可以在 appengine_config.py 中定義:

my_module_CONSTANT1 = 'foofoo'
my_module_hook_function1 = lambda: 'bazbaz'

因此,在 my_module.py 中,以下敘述為真:

  • _config.CONSTANT1 現在是 'foofoo'
  • _config.CONSTANT2 仍為 'bar'
  • _config.hook_function1() 傳回 'bazbaz'

lib_config.register() 傳回之後,就可以立即在 my_module.py 中使用使用者覆寫值。